簡體   English   中英

NUnit TestCaseSource 如何從列表中設置參數

[英]NUnit TestCaseSource how to set parameters from list

我的一個普通Class methods生成一個listparameters ,我想一直規定他們每個人作為參數傳遞給我的NUnit測試。

我閱讀了一些關於TestCaseSource屬性的文檔,但不知道如何實現它。

例如我的方法返回一個列表

“1”、“2”、“3”、“4”

...在我如何將它們中的每一個放入我的測試中。 謝謝!

這是我返回list method

        public static List<string> TestCombinationsProvider()
    {
        List<string> resultList = new List<string>();
        List<string> parametersList = new List<string>();

        foreach (var item in ReturnDynamicPararmetersEntityProperties())
        {
            parametersList.Add(item.Name);
        }

        for (int i = 0; i < parametersList.Count; i++)
        {
            for (int j = i + 1; j < parametersList.Count; j++)
            {
                resultList.Add(parametersList[i] + " AND " + parametersList[j]);
            }
        }

        return resultList;
    }

和空的Nunit測試:

    [Test]
    [TestCaseSource("")]
    public void Test1()
    {

    }

我想對列表中的每一行進行測試

文檔很清楚。 您需要返回測試用例列表,而不是返回List<string> ,例如直接使用IEnumerable<TestCaseData>

public static IEnumerable<TestCaseData> TestCombinationsProvider()
{
    List<string> resultList = new List<string>();
    List<string> parametersList = new List<string>();

    foreach (var item in ReturnDynamicPararmetersEntityProperties())
    {
        parametersList.Add(item.Name);
    }

    for (int i = 0; i < parametersList.Count; i++)
    {
        for (int j = i + 1; j < parametersList.Count; j++)
        {
            yield return new TestCaseData(parametersList[i] + " AND " + parametersList[j]);
        }
    }
}

該方法有多個不同的簽名,例如還返回object[]的集合。 但是我不會推薦它們,因為您會失去很多可以使用TestCaseData做的事情,例如設置每個測試Name或其Description

然后裝飾你的實際測試方法:

[Test]
[TestCaseSource(nameof(TestCombinationsProvider))]
public void Test1(string p)
{

}

編輯:當您的TestCombinationsProvider -方法在另一個類中時,請改用它:

[TestCaseSource(typeof(TheClass), nameof(TheClass.TestCombinationsProvider))]

TestCaseSourceAttribute 構造函數有兩個重載,如果你需要從另一個類設置數據,你應該使用這個構造函數。

TestCaseSourceAttribute(Type sourceType, string sourceName);

它看起來像這樣:

public class TestData {

    public static IEnumerable<string> TestCombinationsProvider()
    {
        var parametersList = ReturnDynamicPararmetersEntityProperties().Select(x => x.Name).ToList();

        for (int i = 0; i < parametersList.Count; i++)
        {
            for (int j = i + 1; j < parametersList.Count; j++)
            {
                yield return  parametersList[i] + " AND " + parametersList[j];
            }
        }
    }
}

public class Tests
{
    [TestCaseSource(typeof(TestData), nameof(TestData.TestCombinationsProvider))]
    public void Test1(string test)
    {
        Assert.Pass();
    }
}

暫無
暫無

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

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