如何使用TechTalk.SpecFlow和C#以编程方式验证测试失败?

时间:2014-02-17 20:50:32

标签: c# specflow acceptance-testing

我希望在[AfterTestRun]属性标记为class的测试失败后执行[Binding]属性标记方法。我怎样才能实现以下目标:

[Binding]
public class TestsRunner
{
   [AfterTestFails] // There is no such attribute
   public static void DoStuff()
   {

   }
}

[Binding]
public class TestsRunner
{
   [AfterTestRun]
   public static void DoStuff()
   {
        if(ScenarioContext.Current.TestHasFailed) // There is no such property
        {
            // Do stuff
        }  
   }
}

2 个答案:

答案 0 :(得分:7)

阅读了一些文档here后,我找到了下一个解决方案:

[Binding]
public class TestsRunner
{
    [AfterScenario]
    public void TakeScreenShot()
    {
        if(ScenarioContext.Current.TestError != null)
        {
            WebBrowser.TakeScreenShot(); // Your custom browser take screenshot method 
        }
    }
}

答案 1 :(得分:1)

正如你所说,这些东西不存在。这可能是因为你试图用SpecFlow做一些它没有被设计的东西。

不要忘记所有SpecFlow都是为了弥合单元测试框架(如NUnit,XUnit或MSTest)与Gherkin格式支持纯文本场景之间的差距。

如果你想做与运行测试有关的这些事情,那么你可能需要查看单元测试框架,或者更有可能建立自己的测试运行器。

顺便说一下,你真正想做的是什么?