我如何以编程方式确定已执行了多少单元测试?

时间:2014-04-11 15:02:54

标签: c# unit-testing mstest coded-ui-tests vs-unit-testing-framework

我有一个CodedUI测试套件,作为MSTest Unit测试运行。我在AssemblyCleanup中有一个方法,它将通过电子邮件发送存储在外部数据库中的测试运行结果。如何以编程方式确定在上次运行会话期间执行了多少单元测试?如果我们执行的测试少于10次,我不想发送电子邮件。这样我们只能在运行整个CodedUI套件时收到电子邮件,而不是在我们调试测试时。我们目前有一个SendEmail标志,必须手动设置,但我希望这是以编程方式确定的。

1 个答案:

答案 0 :(得分:4)

使用基本测试类,该类具有保存已执行测试数的属性。所有其他测试类都继承它,并在TestInitialize增加该属性。

运行以下代码并在测试输出上查看结果。

[TestClass]
public class BaseTestClass
{
    private static int _executedTests;
    private static int _passedTests;

    [AssemblyCleanup()]
    public static void AssemblyCleanup()
    {
        Console.WriteLine("Total tests executed: {0}", _executedTests );
        Console.WriteLine("Total passed tests: {0}", _passedTests);
    }

    protected void IncrementTests()
    {
        _executedTests++;
    }

    protected void IncrementPassedTests()
    {
        _passedTests++;
    }
}

[TestClass]
public class TestClass : BaseTestClass
{
    [TestInitialize]
    public void TestInitialize()
    {
        IncrementTests();
    }

    [TestCleanup]
    public void TestCleanup()
    {
        if (TestContext.CurrentTestOutcome == UnitTestOutcome.Passed)
        {
            IncrementPassedTests();
        }
    }

    [TestMethod]
    public void TestMethod1()
    {
    }

    [TestMethod]
    public void TestMethod2()
    {
        Assert.Fail();
    }

    public TestContext TestContext { get; set; }
}

注意:可以在CodedUITests上使用相同的代码