1、测试方法的命名
- 被测试方法_测试方案_调用方案的预期行为
public class StringCalculator
{
public object Add(string v)
{
return int.Parse(y);
}
}
测试代码
[Fact]
public void Add_SingleNumber_ReturnsSameNumber()
{
var stringCalculator = new StringCalculator();
var actual = stringCalculator.Add("0");
Assert.Equal(0, actual);
}
2、单元测试模式
- Arrange 安排测试对象,准备测试数据
- Act执行测试行为
- Assert断言逾期行为
[Fact]
public void Add_EmptyString_ReturnsZero()
{ // Arrange
var stringCalculator = new StringCalculator();
// Act
var actual = stringCalculator.Add("");
// Assert
Assert.Equal(0, actual);
}
3、测试方法论
- 编写测试时需要将重点放在行为上
- 对于魔幻字符串,一种很好的方法是将这些值赋给常量
[Fact]
void Add_MaximumSumResult_ThrowsOverflowException()
{
var stringCalculator = new StringCalculator();
const string MAXIMUM_RESULT = "1001";
Action actual = () => stringCalculator.Add(MAXIMUM_RESULT);
Assert.Throws<OverflowException>(actual);
}
- 避免手动字符串串联和逻辑条件,例如 if 、 while 、 for 和 switch 等等
// Bad Test
[Fact]
public void Add_MultipleNumbers_ReturnsCorrectResults()
{
var stringCalculator = new StringCalculator();
var expected = 0;
var testCases = new[] { "0,0,0", "0,1,2", "1,2,3" };
foreach (var test in testCases)
{
Assert.Equal(expected, stringCalculator.Add(test));
expected += 3;
}
}
//Good Test
[Theory]
[InlineData("0,0,0", 0)]
[InlineData("0,1,2", 3)]
[InlineData("1,2,3", 6)]
public void Add_MultipleNumbers_ReturnsSumOfNumbers(string input, int expected)
{
var stringCalculator = new StringCalculator();
var actual = stringCalculator.Add(input);
Assert.Equal(expected, actual);
}
- 避免多个断言(方法同上)
- 不需要对私有方法单独测试
来源:https://www.cnblogs.com/zlgan/p/12180235.html