我使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用理论并测试方法是否返回异常?
在此示例中,如果出现以下情况,则会返回异常value1 == value2:
[InlineData(2, 2, Exception???)]
Run Code Online (Sandbox Code Playgroud)
http://dontcodetired.com/blog/post/Testing-for-Thrown-Exceptions-in-xUnitnet
[Theory]
[InlineData(1, 2, 3)]
[InlineData(-2, 2, 0)]
[InlineData(int.MinValue, -1, int.MaxValue)]
public void Calculator_CanAddValidValues(int value1, int value2, int expected) {
var calculator = new Calculator();
var result = calculator.Add(value1, value2);
Assert.Equal(expected, result);
}
[Theory]
[InlineData(1, 1)]
[InlineData(2, 2)]
[InlineData(89, 89)]
public void Calculator_InValidValuesThrowArgumentOutOfRangeException(int value1, int value2) {
var calculator = new Calculator();
Assert.Throws<ArgumentOutOfRangeException>(() => calculator.Add(value1, value2);
}
public class Calculator {
public int Add(int value1, int value2) {
if (value1 == value2)
throw new ArgumentOutOfRangeException();
return value1 + value2;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到它像这样工作..
[Theory]
[InlineData("", typeof(ArgumentException),"invalid name")]
[InlineData(null, typeof(ArgumentNullException), "name cannot be null")]
public void some_test(string name, Type exceptionType, string message){
var project = new Project();
try {
project.updateName(name);
}
catch (Exception e){
Assert.True(e.GetType() == exceptionType);
Assert.Equal(e.Message,message);
}
}
Run Code Online (Sandbox Code Playgroud)