【发布时间】:2019-05-08 16:27:46
【问题描述】:
我使用 XUnit 进行了以下单元测试:
[Theory]
[InlineData(1, 2, 3)]
[InlineData(-2, 2, 0)]
[InlineData(int.MinValue, -1, int.MaxValue)]
public void CanAddTheory(int value1, int value2, int expected) {
var calculator = new Calculator();
var result = calculator.Add(value1, value2);
Assert.Equal(expected, result);
}
public class Calculator {
public int Add(int value1, int value2) {
if (value1 == value2)
throw new ArgumentOutOfRangeException();
return value1 + value2;
}
}
是否可以使用理论并测试方法是否返回异常?
在此示例中,如果 value1 == value2: 会返回异常:
[InlineData(2, 2, Exception???)]
【问题讨论】:
-
无论如何,我建议使用不同的测试来检查异常,您正在测试不同的东西。
-
您是否尝试将此异常测试添加到现有理论中?您可以随时添加一个单独的
[Fact]或[Theory]并使用不同的参数,并使用Assert.Throws()作为测试。 -
如果您想测试所有导致相同异常的多个输入,我可以看到它是有意义的。但是将两者混合起来没有任何意义。
-
我将为异常创建一个不同的测试。感谢您的意见。
-
否,因为
Inline属性只接受常量值作为参数。例外不是。