2009-10-20 2 views
25

Chúng tôi đã có một số thử nghiệm tích hợp trong giải pháp của chúng tôi. Để chạy các thử nghiệm này, phần mềm mô phỏng phải được cài đặt trên máy tính của nhà phát triển. Tuy nhiên, phần mềm này không được cài đặt trên mọi máy tính của nhà phát triển. Nếu phần mềm mô phỏng không được cài đặt thì các bài kiểm tra này sẽ bị bỏ qua nếu không ==> NullRefException.Bỏ qua kiểm tra hoặc TestFixture dựa trên điều kiện

Tôi hiện đang tìm cách thực hiện "bỏ qua có điều kiện" cho thử nghiệm/kiểm tra. Something như

if (simulationFilesExist) làm TestFixture khác skip TestFixture

NUnit đưa ra một số điều hữu ích như bỏ qua và rõ ràng nhưng đó không phải im lặng những gì tôi cần.

Cảm ơn

Trả lời

39

Sử dụng một số mã trong thử nghiệm hoặc vật cố của bạn thiết lập phương pháp phát hiện nếu phần mềm mô phỏng được cài đặt hay không và gọi Assert.Ignore() nếu nó không phải là.

[SetUp] 
public void TestSetUp() 
{ 
    if (!TestHelper.SimulationFilesExist()) 
    { 
     Assert.Ignore("Simulation files are not installed. Omitting."); 
    } 
} 

hoặc

[TestFixtureSetUp] 
public void FixtureSetUp() 
{ 
    if (!TestHelper.SimulationFilesExist()) 
    { 
     Assert.Ignore("Simulation files are not installed. Omitting fixture."); 
    } 
} 
+0

Cảm ơn bạn đã phản hồi nhanh! Nhưng điều này sẽ dẫn đến một bài kiểm tra thất bại, không thực sự những gì tôi muốn. Thực tế là kiểm tra đã không được thực hiện không có nghĩa là nó sẽ biểu thị không thành công (trong trường hợp của tôi). –

+3

No. Assert.Fail sẽ dẫn đến kết quả kiểm tra không thành công. Assert.Ignore() thực hiện chính xác những gì bạn muốn nó làm. Nó gây ra các thử nghiệm được bỏ qua trong thời gian chạy. Trích dẫn từ các tài liệu: "Phương pháp Assert.Ignore cung cấp cho bạn khả năng tự động gây ra một kiểm tra hoặc bộ phần mềm bị bỏ qua khi chạy." – tvanfosson

+0

Bạn đúng tvanfosson. Khi bạn chỉ chạy testfixture nó sẽ cho thấy thất bại, nhưng khi bạn chạy một loạt các testfixtures tất cả cùng nhau testfixture sẽ được bỏ qua và kết quả cuối cùng là THÀNH CÔNG !! Cảm ơn rất nhiều. –

6

NUnit cũng cung cấp cho bạn tùy chọn để cung cấp một loại thuộc tính. Tùy thuộc vào cách bạn đang chạy thử nghiệm của mình, có thể phù hợp để gắn cờ tất cả các thử nghiệm yêu cầu trình mô phỏng có danh mục đã biết (ví dụ: [Danh mục ("RequiresSimulationSoftware")]). Sau đó, từ NUnit Gui bạn có thể chọn loại trừ một số danh mục nhất định. Bạn có thể làm điều tương tự từ dòng lệnh NUnit (chỉ định/loại trừ: RequireSimulationSoftware nếu có).

Hy vọng điều này (hoặc câu trả lời trước đó của tvanfosson) sẽ giúp ích cho bạn.

+1

Hey, tôi nghĩ về giải pháp này. Nhược điểm của giải pháp này là nó là người gọi cụ thể. Đôi khi chúng tôi thực hiện các kiểm tra từ bên trong VStudio và lần khác từ một tập lệnh. Cả hai nên được thay đổi và duy trì. –

+0

+1. Tôi thích nó nhiều hơn "Assert.Ignore", bởi vì nó chỉ là thuộc tính và cờ bổ sung cho CLI trong trường hợp của tôi. –

1
[SetUp] 
public void TestSetUp() 
{ 
    if (!TestHelper.SimulationFilesExist()) 
    { 
     Assert.Ignore("Simulation files are not installed. Omitting."); 
    } 
} 

bạn sử dụng loại điều kiện này trong TestFixtureSet Attribute. Nhưng nếu fixture này có parametreized thử nghiệm sau đó nếu bạn muốn bỏ qua thử nghiệm tham số của trận đấu này thì điều này đi trong vòng lặp vô hạn và thử nghiệm của bạn sẽ được treo cổ. Vì vậy, bạn sử dụng thuộc tính thiết lập tốt hơn cho điều kiện.