我需要编写这个测试方法,检查方法AMethod1和AMethod2返回相同的结果,使用相同的布尔参数(AMethod1被重构为AMethod2)
调用这些方法时如何实现所有可能的参数组合?当然,我可以只复制粘贴9种不同的组合,但也许有更优雅的方式?
[TestClass]
public class UnitTest1
{
[TestMethod]
public void OriginalMethodAndOptimizedReturnSameResult()
{
// By supplying same set of parameters for both methods,
// the test should succeed if methods return same result
var result1 = Program.AMethod1(false, false, false);
var result2 = Program.AMethod2(false, false, false);
Assert.AreEqual(result1, result2);
}
}
另一个问题 - 如果测试运行时间超过10秒,如何使测试失败?
答案 0 :(得分:1)
使用迭代计数器的位模式:
for(var i = 0; i < 8; i++) {
var a = (i & 1) > 0;
var b = (i & 2) > 0;
var c = (i & 4) > 0;
var result1 = Program.AMethod1(a, b, c);
var result2 = Program.AMethod2(a, b, c);
Assert.AreEqual(result1, result2);
}
对于超时,mstest支持timeout argument @ MSDN
答案 1 :(得分:0)
在VS2017中,这似乎有效,不确定您使用的是哪个VS版本。仍然冗长,但比编写8种组合更好:
[DataTestMethod]
[DataRow(false, false, false)]
[DataRow(false, false, true)]
[DataRow(false, true, false)]
[DataRow(false, true, true)]
[DataRow(true, false, false)]
[DataRow(true, false, true)]
[DataRow(true, true, false)]
[DataRow(true, true, true)]
public void OriginalMethodAndOptimizedReturnSameResult(bool b1, bool b2, bool b3)
{
// By supplying same set of parameters for both methods,
// the test should succeed if methods return same result
var result1 = Program.AMethod1(b1, b2, b3);
var result2 = Program.AMethod2(b1, b2, b3);
Assert.AreEqual(result1, result2);
}