我最近升级到NUnit 2.5(是的,我知道),我想知道我是否可以选择某人的大脑。
我有很多看起来像这样的测试:
[Test]
public void TestTheSpecialDict() {
int start = 0;
int end = 44;
Dictionary<int, string> = SomeFunction(start, end);
Assert.That(dict1.Count > 0);
// Alright now, some funky values
start = -1;
end = -34;
Dictionary<int, string> dict2 = SomeFunction(start, end);
Assert.That(dict2.Count == 0);
}
因此,此特定测试可确保SomeFunction
在范围无效时返回空字典,而不是null。例如。
现在我在2.x中发现了[TestCase(...)]
属性。我的天啊!所以我希望我的测试看起来像这样:
[TestCase(0, 44)]
[TestCase(-1, -34)]
public void TestTheSpecialDict(int start, int end) {
/* ... */
}
真棒。这里的问题当然是第二个Assert在第一个测试用例中失败,第一个断言在第二个失败。这显然是预期的行为,因为start
和end
具有方法范围并适用于这两种操作。毫不奇怪。
解决这个问题不是问题:
有“清洁”的方式吗?我查看了NUnit.Framework
,我看不出任何可以让我这么做的事情流利我想。所以我想知道是否有人在NUnit 1.x中拥有这种“遗留”UT结构,以及他们如何在利用新功能的同时迁移。
答案 0 :(得分:1)
请原谅我没有使用Visual Studio来测试它。但也许使用Assert.That并传入一个评估参数。像这样:
[TestCase(0, 44, Is.GreaterThan(0))]
[TestCase(-1, -34, Is.Empty]
public void TestTheSpecialDict(int start, int end, Func<Dictionary<int, string>, bool> condition) {
/* ... */
Assert.That(dict.Count, condition);
}
再次道歉它不准确,特别是参数类型可能只是猜测它,但基本的想法应该成立。
答案 1 :(得分:1)
我个人认为这些TestCase属性对于测试带有一些参数并返回一些值的函数非常有用。所以在属性中你可以给它参数和期望值,它工作正常。在你的情况下,你可以有你的字典的确切计数或如果它的正面的布尔值。我不相信它会增加你的情况下的可读性......