2013-07-12 42 views
6

Tôi phải sử dụng khung kiểm thử đơn vị VS để đảm bảo tất cả mã đang hoạt động chính xác. Tuy nhiên tôi đang gặp rất nhiều rắc rối khi thử nghiệm yêu cầu các đối số dòng lệnh để làm việc (vì các đầu vào dòng lệnh phải được cung cấp trong thời gian chạy ... và với các kiểm tra đơn vị không có "thời gian chạy" thực). Có cách nào để chạy thử nghiệm đơn vị của tôi với đầu vào đối số dòng lệnh không? Tôi nhận ra đây không phải là cách lý tưởng để xây dựng một chương trình, nhưng tiếc là tôi không quyết định cách thức hoạt động của quá trình thử nghiệm.Đối số dòng lệnh với Visual Studio Unit Testing C#

Tôi đã đọc rằng tôi có khả năng có thể viết một tệp lô và đưa nó vào thư mục MStest/testcontainer. Có một số vết thương tôi phải rõ ràng để làm điều đó theo cách này. Những hurtles bao gồm:

1) Tôi không biết gì về các tập tin batch

2) Tôi không biết nơi mà các thư mục MSTest/testcontainer là, làm thế nào để truy cập vào nó, làm thế nào nó hoạt động, hoặc thậm chí làm thế nào để thêm các tập tin cho nó (vì nó có vẻ là ẩn hoặc không dễ dàng truy cập).

3) Tôi không biết mình sẽ làm gì với tệp lô ngay cả khi tệp được viết chính xác và trong thư mục MStest/testcontainer. Làm thế nào là thử nghiệm của tôi thậm chí còn phải biết nó ở đó, hãy để một mình lấy đầu vào từ nó?

Vì vậy, để tóm tắt: Làm thế nào để thực hiện một thử nghiệm đơn vị VS có trong các đối số dòng lệnh? Nếu tôi KHÔNG phải sử dụng phương pháp tập tin batch, tôi sẽ đánh giá cao nó được giải thích cho tôi như tôi 5. Tôi xin lỗi nếu tôi có chút bất lực trong chủ đề này, nhưng tôi không thể tìm thấy bất kỳ lời giải thích rõ ràng hoặc hữu ích nào cách mọi thứ trong số này hoạt động trong ngữ cảnh cụ thể này.

Cảm ơn một tấn.

Trả lời

0

Bạn có thể bắt đầu phiên bản chương trình mới trong phương pháp thử với Process class. Một cái gì đó như:

Process prop = new Process(); 
prop.StartInfo.FileName = "myProgram.exe"; 
prop.StartInfo.Arguments = "-arg1 -arg2"; 
prop.StartInfo.RedirectStandardOutput = true; 
prop.StartInfo.RedirectStandardInput = true; 
prop.Start(); 
// You can then use prop.StandardInput and prop.StandardOutput for testing. 
prop.WaitForExit(); 
int code = prop.ExitCode; 
+0

Điều này có vẻ dễ dàng hơn nhiều so với toàn bộ tệp lô vô nghĩa đó! Không gian tên nào là Quy trình theo? Ngoài ra làm thế nào tôi sẽ đi về việc sử dụng prop trong các bài kiểm tra của tôi? Ví dụ arg1 là đầu vào tôi cần truy cập, tôi chỉ cần nói: "prop.StandardInput.arg1" để truy cập arg1 để sử dụng trong các hàm thử nghiệm của tôi? –

+0

prop.StandardInput và prop.StandardOutput chỉ là các luồng mà bạn có thể gửi văn bản và đọc từ đó. Điều này sẽ là cơ bản một thử nghiệm blackbox cho chương trình. Điều này sẽ không cung cấp quyền truy cập vào các phương thức/biến cụ thể. Nó sẽ chỉ kiểm tra givin một đầu vào nhất định, thu được đầu ra chính xác. – Cemafor

+0

Mọi thứ có vẻ đang chạy trơn tru nhờ sự giúp đỡ của bạn. Cám ơn rất nhiều. –

2

ngắn, sẽ giải quyết vấn đề của bạn, và cách tiếp cận không chính xác để kiểm tra đơn vị :-):

Nếu chương trình của bạn đòi hỏi phải có đối số dòng lệnh, sau đó nó nên có static void Main(string[] args) phương pháp.

Chỉ cần viết các bài kiểm tra đơn vị của bạn để gọi phương thức này với bất kỳ đối số dòng lệnh nào bạn thường thêm vào.

Dài hơn, cách tốt hơn: Tách chức năng yout trong 2 - một lớp thực hiện công việc và chỉ một chương trình đơn giản nhận các đối số dòng lệnh và chuyển chúng cho nhân viên.

Ghi 2 đơn vị kiểm tra - một, Main (xxx) thực sự chuyển các đối số cho lớp của bạn và nhiều bài kiểm tra đơn vị cho nhân viên thực tế của bạn để xác minh hành vi của nó dựa trên các đối số này.

Các vấn đề liên quan