2012-04-05 26 views
7

Tôi có một lớp thử nghiệm như sau:Không phải tất cả các xét nghiệm đang chạy trong parameterised mảng chứa NUnit TestFixture

[TestFixture("someurl1", new[] { "param1", "param2" }, 15)] 
[TestFixture("someurl2", new[] { "param3" }, 15)] 
public class my_test 
{ 
    public my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
    } 
} 

Khi chạy thử nghiệm này trong ReSharper 6.1 và NUnit 2.5.10, kiểm tra được không chạy hai lần, như dự kiến, nó chỉ chạy một lần. Trong kết quả kiểm tra tôi thấy được liệt kê

my_test("someurl1", System.String[], 15) 

Điều này làm cho tôi nghĩ rằng hai đồ đạc được coi là giống nhau và NUnit không phân biệt giữa các mảng chuỗi trong hai thử nghiệm.

Như một giải pháp thay thế, tôi đã thêm thông số giả vào hàm tạo. Nếu tôi đặt giá trị này thành một giá trị khác nhau cho từng vật cố định thì tất cả các thử nghiệm sẽ chạy.

Không thể có TestFixtures với mảng chứa các giá trị khác nhau? Tôi vừa mới nâng cấp từ ReSharper 5 nên tôi tự hỏi liệu điều đó có liên quan không. Tôi đã đọc về một số vấn đề với các thử nghiệm được tham số hóa trong 6.x.

+0

Ứng dụng có hoạt động trong nhân tố NUnit không? – Scroog1

+0

Ngoài ra, cảm ơn bạn đã chỉ ra rằng bạn có thể có đồ đạc thử nghiệm được tham số hóa, vì tôi không biết điều này là có thể. – Scroog1

+1

Chỉ cần thử trong các NUnit Á hậu và chạy tất cả các bài kiểm tra thành công. Tôi nghĩ rằng nó có thể liên quan đến việc nâng cấp ReSharper. –

Trả lời

0

Tôi nghĩ rằng điều này liên quan đến việc tạo mới một mảng trong hàm tạo TestFixture, tôi đọc ở đâu đó mà bạn không thể làm điều đó.

0

Bạn đã thử tạo từng thử nghiệm dưới dạng TestFixture chung chưa ??? Một cái gì đó như

[TestFixture] 
public class my_test 
{ 
    private bool my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
     return DidTestCompleteOk; 
    } 

    [Test] 
    public void TestURL1() 
    { 
     Assert.IsTrue(my_test("someurl1", new[] { "param1", "param2" }, 15)); 
    } 

    [Test] 
    public void TestURL2() 
    { 
     Assert.IsTrue(my_test("someurl2", new[] { "param3" }, 15)); 
    } 
} 
4
[TestFixture("someurl1", "param1|param2", 15)] 
[TestFixture("someurl2", "param3", 15)] 
public class my_test 
{ 
    private string[] _fields; 

    public my_test(string url, string fieldList, int someVal) 
    { 
     _fields = fieldList.Split('|'); 
     // test setup 
    } 

    [Test] 
    public void listFields() 
    { 
     foreach (var field in _fields) 
     { 
      Console.WriteLine(field); 
     } 
    } 
} 
0

Hóa ra đây là thông báo lỗi tuyệt đối nếu bất cứ điều gì đi sai trong constructor một bộ ghép đo tham số của. Bạn không nhận được thông tin ngoại lệ thực sự được trả lại như khi nội dung không thành công trong mã khác.

Vì vậy, bạn có thể nên chuyển mã thiết lập của mình thành [SetUp] hoặc [TestFixtureSetUp] hoặc thực tế đảm bảo rằng hàm tạo của bạn đang thực thi mà không có lỗi. Nhưng thực sự bạn nên thực hiện gợi ý đầu tiên, và chỉ lưu các tham số cố định thử nghiệm trong hàm khởi tạo và làm điều gì đó với chúng theo một phương thức khác.

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