簡體   English   中英

並非所有測試都在包含 arrays 的參數化 NUnit TestFixture 中運行

[英]Not all tests are run in parameterised NUnit TestFixture containing arrays

我有一個測試 class 如下:

[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
    }
}

在 ReSharper 6.1 和 NUnit 2.5.10 中運行此測試時,測試沒有像預期的那樣運行兩次,它只運行一次。 在測試結果中我看到列出

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

這讓我認為這兩個固定裝置被視為相同,並且 NUnit 在兩個測試中沒有區分字符串 arrays。

作為解決方法,我在構造函數中添加了一個虛擬參數。 如果我為每個夾具將其設置為不同的值,那么所有測試都會運行。

arrays 的 TestFixtures 不可能包含不同的值嗎? 我剛剛從 ReSharper 5 升級,所以我想知道這是否相關。 我已經閱讀了 6.x 中參數化測試的一些問題。

[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);
        }
    }
}

我認為這與在 TestFixture 構造函數中更新數組有關,我在某處讀到你不能這樣做。

您是否嘗試過在其下創建單獨的測試作為通用 TestFixture??? 就像是

[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) );
    }
}

事實證明,如果在參數化測試夾具的構造函數中出現任何問題,這就是絕對錯誤消息。 您不會像其他代碼中的東西失敗時那樣獲得返回的實際異常信息。

因此,您可能應該將設置代碼移至[SetUp][TestFixtureSetUp] ,或者真正確保您的構造函數執行無誤。 但實際上你應該做第一個建議,只在構造函數中保存測試夾具參數,並在另一種方法中對它們做一些事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM