NUnit TestCaseSource将值传递给工厂

Gra*_*ham 6 nunit testcaseattribute

我正在使用NUnit 2.5.3 TestCaseSource属性并创建工厂来生成我的测试.像这样的东西:

[Test, TestCaseSource(typeof(TestCaseFactories), "VariableString")]
public void Does_Pass_Standard_Description_Tests(string text)
{
    Item obj = new Item();
    obj.Description = text;
}
Run Code Online (Sandbox Code Playgroud)

我的来源是这样的:

public static IEnumerable<TestCaseData> VariableString
{
    get
    {
        yield return new TestCaseData(string.Empty).Throws(typeof(PreconditionException))
            .SetName("Does_Reject_Empty_Text");
        yield return new TestCaseData(null).Throws(typeof(PreconditionException))
            .SetName("Does_Reject_Null_Text");
        yield return new TestCaseData("  ").Throws(typeof(PreconditionException))
            .SetName("Does_Reject_Whitespace_Text");
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要做的是向变量字符串添加最大长度检查,但是这个最大长度是在被测试类中的合同中定义的.在我们的例子中它是一个简单的公共结构

   public struct ItemLengths
    {
        public const int Description = 255;
    }
Run Code Online (Sandbox Code Playgroud)

我找不到任何方法将值传递给测试用例生成器.我尝试过静态共享值,但这些值并没有被提取.我不想将文件保存到文件中,因为每次代码更改时我都需要重新生成此文件.

我想在我的测试用例中添加以下行:

yield return new TestCaseData(new string('A', MAX_LENGTH_HERE + 1))
    .Throws(typeof(PreconditionException));
Run Code Online (Sandbox Code Playgroud)

在概念上相当简单,但我发现无法做到的事情.有什么建议?

Way*_*yne 2

将测试的参数更改为类而不是字符串。就像这样:

公共类 StringTest { 公共字符串 testString; 公共 int 最大长度;}

然后构造此类作为参数传递给 TestCaseData 构造函数。这样您就可以传递字符串和您喜欢的任何其他参数。

另一种选择是让测试有两个参数:字符串和整数。

然后是 TestCaseData(“mystring”, 255)。您是否意识到他们可以有多个论点?

韦恩