2015-09-15 14 views
8

Tôi đang sử dụng NUnit 3.0 và TestFixtureSource để chạy các trường hợp thử nghiệm bên trong một vật cố nhiều lần với các tham số/cấu hình khác nhau (tôi muốn thực hiện điều này ở mức TestFixture). Ví dụ đơn giản:Nunit3 làm thế nào để thay đổi tên testcase dựa trên các tham số được truyền từ TestFixtureSource

[TestFixtureSource(typeof (ConfigurationProvider))] 
public class Fixture 
{ 
    public Fixture(Configuration configuration) 
    { 
     _configuration = configuration; 
    } 

    private Configuration _configuration; 

    [Test] 
    public void Test() 
    { 
     //do something with _configuration 
     Assert.Fail(); 
    } 
} 

Giả sử() không thành công cho một trong các cấu hình và thành công cho một cấu hình khác. Trong tệp báo cáo chạy và trong Test Explorer của Visual Studio tên cho cả hai thất bại và chạy thành công sẽ được hiển thị như chỉ Test(), mà không cho tôi biết bất cứ điều gì về thiết lập gây ra vấn đề.

Có cách nào để ảnh hưởng đến tên trường hợp thử nghiệm trong trường hợp này (tức là tiền tố tên của nó trên mỗi lần chạy/cấu hình)? Như một giải pháp thay thế, tôi hiện đang in kết quả đầu ra trước mỗi vụ cháy thử nghiệm nhưng tôi không muốn thực hiện điều đó.

Vì NUnit 3.0 đang ở giai đoạn thử nghiệm và tính năng này khá mới, tôi không thể tìm thấy bất kỳ thứ gì trong tài liệu. Tôi tìm thấy TestCaseData nhưng tôi không nghĩ rằng nó phù hợp để được sử dụng với đồ đạc chỉ được nêu ra (nó được thiết kế cho các trường hợp thử nghiệm).

Trả lời

2

Tôi không thể tìm cách thay đổi tên thử nghiệm, nhưng không cần thiết, bởi vì NUnit3 xây dựng tên thử nghiệm bằng cách bao gồm mô tả của testfixture.

Ví dụ lớp Fixture từ các câu hỏi có thể được sử dụng không thay đổi nếu ConfigurationConfigurationProvider có một thực hiện như thế này:

public class Configuration 
{ 
    public string Description { get; } 

    public Configuration(string description) 
    { 
     Description = description; 
    } 

    public override string ToString() 
    { 
     return Description; 
    } 
} 

public class ConfigurationProvider : IEnumerable 
{ 
    public IEnumerator GetEnumerator() 
    { 
     yield return new Configuration("Foo"); 
     yield return new Configuration("Bar"); 
     yield return new Configuration("Baz"); 
    } 
} 

Các 'lừa' là để đảm bảo các nhà xây dựng tham số với bộ ghép là một chuỗi hoặc có một phương pháp ToString cho biết mô tả hợp lý của vật cố định.

Nếu bạn đang sử dụng bộ điều hợp thử nghiệm NUnit 3 trong Visual Studio, thì các thử nghiệm sẽ được hiển thị là Fixture(Foo), Fixture(Bar)Fixture(Baz) để bạn có thể dễ dàng phân biệt giữa các thử nghiệm của họ. Xml-đầu ra từ nunit3-console.exe cũng sử dụng tên mô tả, fx: fullname=MyTests.Fixture(Bar).Test

<test-case id="0-1003" name="Test" fullname="MyTests.Fixture(Bar).Test" methodname="Test" classname="MyTests.Fixture" runstate="Runnable" result="Failed" ... > 
    <failure> 
     <message><![CDATA[]]></message> 
     <stack-trace><![CDATA[at MyTests.Fixture.Test() in ... ]]></stack-trace> 
    </failure> 
    ... 
</test-case> 

Using NUnit 3 Test Adapter in Visual Studio

0

Một cách để thực hiện những hành động như vậy là để có tìm và thay thế thẻ trong mã nguồn và tự động xây dựng thư viện kiểm tra trước khi thực hiện bằng cách sử dụng dòng lệnh msbuild. bước mức cao là

  1. Xác định tên trường hợp thử nghiệm như sometest_TOKEN trong nguồn sau đó sử dụng công cụ dòng lệnh như fnr.exe replce _TOKEN với bất cứ điều gì bạn muốn. Ví dụ: sometest_build2145.
  2. Biên dịch dll bằng cách sử dụng msbuild ví dụ msbuild/t: REbuild mytestproj.sln. Sau đó, thực hiện tất cả các trường hợp kiểm tra trong mytestproj.dll.
Các vấn đề liên quan