【发布时间】:2016-08-10 14:44:23
【问题描述】:
我为不同的输入创建了一个单元测试,以确保输出正确。
[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
}
因为案例非常相似,所以我把它们放在一个测试方法中。这种行为可以吗,还是违反了单一责任原则?如果它破坏了 SRP,有什么更好的解决方案?
【问题讨论】:
-
您通常希望将它们放在单独的测试中,以便更容易知道哪个测试失败。
-
@itsme86 我应该为每个案例创建一个不同的 TestMethod 吗?如果是这样,这些 TestMethod 的正确命名约定应该是什么?那不是在重复我自己吗?
-
为什么要测试3个案例?他们中的一个人是否测试过任何特殊的边缘情况?如果是这样,请将目的放在单独的测试用例的名称中。
-
如果您在所有 3 种情况下都在做同样的事情,测试框架通常会让您用属性装饰方法以传入参数。例如,测试方法可以接受一个数组,而属性将定义要传入的数组。例如,检查一下:github.com/nunit/docs/wiki/TestCase-Attribute
标签: c# unit-testing tdd solid-principles single-responsibility-principle