在NUnit中捕获断言

时间:2012-02-01 22:06:15

标签: .net testing nunit automated-tests nunit-2.5

我想在测试失败时记录一些上下文信息(比如捕获屏幕截图)。 NUnit框架中有任何可扩展性点,我可以做到吗?理想情况下会是:

    [TearDown]
    public void Down(AssertionException ex) {}

但我们没有。我试图创建一个加载项,但不知道如何在运行时注册它:

[NUnitAddin]
public class UITestCase : TestCaseBase, NUnit.Core.EventListener, NUnit.Core.Extensibility.IAddin {
   .............
    public void UnhandledException(Exception exception){}

    public bool Install(NUnit.Core.Extensibility.IExtensionHost host) {
        IExtensionPoint listeners = host.GetExtensionPoint("EventListeners");
        listeners.Install(this);
        return true;
    }

}

UITestCase是我所有UI测试的基类。 Install()方法不会被调用。任何提示将不胜感激。

更新:要注册的加载项必须使用NUnit运行程序运行(在我的情况下,它是VS的TestDriven.Net插件)和EventListener成员是得到适当的称呼。问题是他们都在 TearDown / TestFixtureTearDown方法之后调用了(我的上下文丢失)。

尝试在我的TearDown中使用TestContext.CurrentContext.Result,但访问StateStatus属性抛出NullReferenceException :(

4 个答案:

答案 0 :(得分:3)

如果你的目的是运行你的应用程序的测试,NUnit不是最好的选择,它只是不打算这样使用。 NUnit用于单元测试,而不是集成测试,它将测试UI如何与逻辑和数据集成。当单元测试正在运行时(包括那些在nunit下运行),没有捕获截图 - 测试运行器将输出定向到一个日志文件,其中包含您可能想要了解的有关测试的所有信息,包括例外。

如果您正在尝试进行UI测试,我建议您使用Watin进行WebApp测试,White进行WPF / Winforms应用测试。

答案 1 :(得分:2)

我认为IAddin方法最有希望,尽管EventListeners可能没有适当的扩展点来满足您的需求。您是否尝试过TestCaseBuildersTestDecorators扩展?

例如,TestDecorators文档说明:

  

<强>目的

     

TestDecorators能够在测试完成之后对其进行修改   构造

     

扩展点

     

Addins使用主机按名称访问此扩展点:

     

IExtensionPoint testDecorators = host.GetExtensionPoint(   “TestDecorators”);接口

     

传递给Install的扩展对象必须实现   ITestDecorator界面:

public interface ITestDecorator     
{       
    Test Decorate( Test test, MemberInfo member );  
} 
     

Decorate方法可以做几件事,具体取决于它需要完成的事情:

     
      
  1. 未经修改的返回测试
  2.   
  3. 修改测试对象的属性并将其返回
  4.   
  5. 将测试替换为另一个对象,丢弃原件或   在新测试中汇总。
  6.   

这听起来像是尝试使用自定义代码包装测试的好地方。

答案 2 :(得分:2)

升级到NUnit 2.6 TestContext.CurrentContext开始按预期工作。

答案 3 :(得分:0)

我认为您可以在测试方法中使用try catch来捕获异常,然后执行一些自定义操作,例如在catch中捕获屏幕截图。