Bas*_*aso 2 c# tdd unit-testing single-responsibility-principle solid-principles
我为不同的输入创建了一个单元测试,以确保输出正确.
[TestMethod]
public void CountInversionTest()
{
#region Arrange
int[] sourceArray = {4, 3, 2, 1};
int correctInversionCount = 6;
int[] sourceArray2 = { 1, 3, 5, 2, 4, 6};
int correctInversionCount2 = 3;
int[] sourceArray3 = { 5, 6, 2, 3, 1, 4, 7 };
int correctInversionCount3 = 10;
#endregion
#region Act
Sorter sorter = new Sorter();
int inversionCount = sorter.CountInversion(sourceArray);
int inversionCount2 = sorter.CountInversion(sourceArray2);
int inversionCount3 = sorter.CountInversion(sourceArray3);
#endregion
#region Assert
Assert.AreEqual(correctInversionCount, inversionCount);
Assert.AreEqual(correctInversionCount2, inversionCount2);
Assert.AreEqual(correctInversionCount3, inversionCount3);
#endregion
}
Run Code Online (Sandbox Code Playgroud)
因为案例非常相似,我把它们放在一个测试方法中.这种行为是否正常还是违反了单一责任原则?如果它破坏SRP,什么是更好的解决方案?
使用适当的单元测试框架(如xUnit.net),您可以编写参数化测试:
[Theory]
[InlineData(new[] { 4, 3, 2, 1 }, 6)]
[InlineData(new[] { 1, 3, 5, 2, 4, 6 }, 3)]
[InlineData(new[] { 5, 6, 2, 3, 1, 4, 7 }, 10)]
public void ParameterizedCountInversionTest(int[] input, int expected)
{
Sorter sut = new Sorter();
var actual = sut.CountInversion(input);
Assert.Equal(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)
这将运行三个测试,而不是一个,使您可以更好地了解哪个特定测试用例失败(如果有任何失败).
这样的测试也更具可读性.
NUnit也有这个功能,但MSTest没有(我上次看过).
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |