2011-10-05 26 views
10

Chúng tôi sử dụng NUnit để thực hiện các kiểm tra tích hợp. Các xét nghiệm này rất tốn thời gian. Thông thường, cách duy nhất để phát hiện lỗi là hết thời gian chờ.Làm thế nào để làm cho NUnit ngừng thực hiện các thử nghiệm trên thất bại đầu tiên

Tôi muốn các thử nghiệm ngừng thực thi ngay sau khi phát hiện lỗi đơn.

Có cách nào để thực hiện việc này không?

+0

Tôi tin rằng đây là nhiệm vụ cụ thể của các cuộc thử nghiệm đặc biệt để bạn chạy thử nghiệm như thế nào? NUnit-giao diện điều khiển, msbuild NUnit nhiệm vụ, một Á hậu khác? – sll

Trả lời

1

Đây có lẽ không phải là giải pháp lý tưởng, nhưng nó thực hiện những gì bạn yêu cầu, nghĩa là bỏ qua các thử nghiệm còn lại nếu thử nghiệm không thành công.

[TestFixture] 
    public class MyTests 
    { 
     [Test] 
     public void Test1() 
     { 
      Ascertain(() => Assert.AreEqual(0, 1)); 
     } 

     [Test] 
     public void Test2() 
     { 
      Ascertain(() => Assert.AreEqual(1, 1)); 
     } 

     private static void Ascertain(Action condition) 
     { 
      try 
      { 
       condition.Invoke(); 
      } 

      catch (AssertionException ex) 
      { 
       Thread.CurrentThread.Abort(); 
      } 
     } 
    } 

Kể từ TestFixtureAttribute là thừa kế, vì vậy bạn có khả năng có thể tạo ra một lớp cơ sở với thuộc tính này được trang trí vào nó và có xác định bảo vệ Phương pháp trong đó và lấy được tất cả các lớp TestFixture từ nó.

Nhược điểm duy nhất là, bạn sẽ phải cấu trúc lại tất cả các xác nhận hiện có của mình.

+0

Đó là một bước đi đúng hướng. Nó sẽ chỉ làm việc cho Asserts, và không phải ngoại lệ. Nhưng đó là một ý tưởng thú vị ... Tôi có thể làm điều gì đó tương tự cho các trường hợp ngoại lệ. – willem

+0

@willem Bạn có thể vui lòng đăng cách giải quyết của bạn cho trường hợp ngoại lệ nếu bạn thành công trước không. Tôi sẽ tiếp tục cố gắng. – Raghu

+0

Bạn có thể không bọc toàn bộ thân phương pháp thử nghiệm trong Ascertain và chỉ chụp tất cả ngoại lệ? –

22

Sử dụng bảng điều khiển nunit, bạn có thể đạt được điều này bằng cách sử dụng tham số dòng lệnh/stoponerror.

Xem here để tham chiếu dòng lệnh.

+4

Tôi tin rằng đây là một cách tiếp cận tốt hơn. Bạn để NUnit xử lý việc này thay vì can thiệp vào quá trình và cũng gây ô nhiễm mã thử nghiệm với những thứ không cần thiết! – mosu

+0

Với nunit ** 3 ** - console.exe --stoponerror –

6

Tôi đang sử dụng NUnit 3 và mã sau hoạt động cho tôi.

public class SomeTests { 
    private bool stop; 

    [SetUp] 
    public void SetUp() 
    { 
     if (stop) 
     { 
      Assert.Inconclusive("Previous test failed"); 
     } 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) 
     { 
      stop = true; 
     } 
    } 
} 

Hoặc bạn có thể tạo lớp trừu tượng này và xuất phát từ nó.

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