这个测试用例怎么写?

How to write this test case?

我需要编写此测试方法来检查方法 AMethod1 和 AMethod2 return 具有相同布尔参数的相同结果(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 秒,如何使测试失败?

在 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);
}

使用迭代计数器的位模式:

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