如何编写这个测试用例?

时间:2018-02-22 21:20:34

标签: c# mstest

我需要编写这个测试方法,检查方法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秒,如何使测试失败?

2 个答案:

答案 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);
}