在测试失败时执行代码

时间:2015-06-11 20:55:30

标签: c# mstest

我有一堆Selenium和MSTest的自动化UI测试。

当测试失败时,我需要截取无头浏览器的屏幕截图,以便我可以诊断发生了什么。

目前我使用try catch throw执行此操作,但需要在每次测试中重复。

[TestMethod]
public void TestThings()
{
    try
    {
        // do things
        Assert.Fail();
    }
    catch (Exception ex)
    {
        Driver.TakeScreenshot();
        throw;
    }
}

重复样板代码让我感到难过,必须有更好的方法。是否有一些onFailed的东西可以用来做这种事情?

1 个答案:

答案 0 :(得分:2)

可能最简单的方法是使用TestCleanup并检查那里的测试结果:

// This will be set by the test framework.
public TestContext TestContext { get; set; }

[TestCleanup]
public void AfterTest()
{
    if (TestContext.CurrentTestOutcome != UnitTestOutcome.Passed) 
    {
        Driver.TakeScreenshot();
    }
}

您可以将它放在基类中并从中继承所有测试类,这样您就不必将它复制到每个类中。