使用Arrays或Generics时,TestCase在NUnit中显示名称

时间:2014-11-14 15:47:57

标签: c# arrays generics nunit testcase

我试图在NUnit中使用TestCaseSource来运行多个测试,其中一个参数是数组

    private static readonly object[] ReturnChopCases =
    {
        new TestCaseData(3, new List<int> {}).Returns(-1),
        new TestCaseData(3, new List<int> {1}).Returns(1),
        new TestCaseData(1, new List<int> {1,2}).Returns(1),
    };

    [TestCaseSource("ReturnChopCases")]
    public int test_chop(int SearchNumber, int[] SearchArray)
    {
        return Chopper.Chop(3, SearchArray);
    }

问题是测试运行器中显示的名称(我使用的是NUnit测试适配器)非常无用,它们都显示为test_chop(0,System.Int32[])或使用List然后{{1} }。

如何在测试运行中保留一个相当可读的测试并为测试提供有用的测试名称?我尝试过一些东西,但我仍然得到上面提到的名字。

2 个答案:

答案 0 :(得分:3)

使用SetName功能命名测试

new TestCaseData(3, new List<int> {}).Returns(-1).SetName("test_chop_List<int>"),

答案 1 :(得分:1)

这是我使用的解决方案,首先我为自定义测试用例创建了一个类

public class CustomTestCase
{
    public CustomTestCase(int SearchNumber, List<int> List, int Result)
    {
        searchNumber = SearchNumber;
        list = List;
        result = Result;
    }
    private int searchNumber;
    private List<int> list;
    private int result;

    public string TestName()
    {
        return string.Format("TestChop({0},{TestCaseSource})", searchNumber, String.Join(",", list));
    }

    public TestCaseData SimpleTest()
    {
        return new TestCaseData(searchNumber, list).Returns(result).SetName(this.TestName());
    }
}

然后我用它来构建private static IEnumerable ReturnChopCases() { List<int> emptyList = new List<int> { }; yield return new CustomTestCase(3,emptyList,-1).SimpleTest(); List<int> singleItemList = new List<int> { 1 }; yield return new CustomTestCase(3, singleItemList, 1).SimpleTest(); yield return new CustomTestCase(3, singleItemList, 1).SimpleTest(); }

using System.Collections;

测试是一样的。

我仍然认为NUnit应该生成更多有用的名称,但我发现这是处理我的问题最简单的方法,如果我想处理异常,我可以创建另一种方法来处理这些。

注意:不要忘记包含using System.Collections.Generic;和{{1}}。