【发布时间】:2015-03-24 12:37:07
【问题描述】:
我必须为将一个枚举映射到另一个枚举的现有方法编写一个单元测试。本单元测试关注的是方法中没有定义映射的场景,我们在switch语句的default块中得到了异常。
enum players{sachin, ponting, mculum, gayle}
enum teams{westindies, australia, india, newzealand, southafrica}
public teams MappingMethod(players p)
{
switch(p)
{
case sachin: return india;
case gayle: return westindies;
......
default: throw new ArgumentOutOfRangeException();
}
}
我尝试了带有 ExpectedException 属性的单元测试,当我们遇到上述情况时,单元测试工作正常。但是当枚举中的所有项目都存在映射时,它会失败。
为了解决这个问题,我在单元测试中使用了 try..catch 块,并使用 Assert.IsInstanceOfType 来检查异常,而不是使用 ExpectedException 属性。
还有其他更好的方法来做这个单元测试吗?
【问题讨论】:
-
也许重新考虑您在单元测试中实际尝试测试的内容?如果您使用“ExpectedException”,它的字面意思是您希望测试抛出异常。如果它有时抛出有时不抛出,那么它不是“预期的”。例如,在你的单元测试中,使用你知道会抛出的东西调用 MappingMethod。
-
它是一个单元测试,当开发人员将项目添加到枚举并忘记或错过更新 MappingMethod 时,它应该会失败。由于这并不总是可能的,除了 try..catch 之外,您还建议使用什么方法
标签: c# vs-unit-testing-framework expected-exception