我正在使用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;
}
我的来源是:
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");
}
}
我需要做的是向变量字符串添加最大长度检查,但是这个最大长度是在被测试类中的合同中定义的。在我们的例子中,它是一个简单的公共结构:
public struct ItemLengths
{
public const int Description = 255;
}
我找不到任何将值传递给测试用例生成器的方法。我尝试过静态共享值,但这些值并没有被提取。我不想将文件保存到文件中,因为每次代码更改时我都需要重新生成此文件。
我想在我的测试用例中添加以下行:
yield return new TestCaseData(new string('A', MAX_LENGTH_HERE + 1))
.Throws(typeof(PreconditionException));
在概念上相当简单,但我发现无法做到的事情。有什么建议吗?
答案 0 :(得分:2)
将测试的参数更改为类而不是字符串。像这样:
public class StringTest { public string testString; public int maxLength; }
然后构造此类以作为参数传递给TestCaseData构造函数。这样你就可以传递字符串和你喜欢的任何其他参数。
另一种选择是让测试有2个字符串和int。
然后是TestCaseData(“mystring”,255)。你有没有意识到他们可以有多个论点?
韦恩
答案 1 :(得分:1)
我遇到了类似你的问题,最后编写了一个小的NUnit插件和一个扩展NUnit TestCaseSourceAttribute的自定义属性。在我的特定情况下,我对将参数传递给工厂方法不感兴趣,但您可以轻松地使用相同的技术来实现您想要的。
这并不是那么难,只需要我写三个小班。您可以在blackbox testing with nunit using a custom testcasesource了解有关我的解决方案的更多信息。
PS。为了使用这种技术,你必须使用NUnit 2.5(至少)祝你好运。