2012-02-01 80 views
6

我想在测试失败时记录一些上下文信息(如捕获屏幕截图)。 NUnit框架中有可扩展性的地方吗?理想情况下它会是:在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的亚军运行(在我的情况下,它是TestDriven.Net插件VS)和EventListener成员得到正确调用。问题是,他们都在 TearDown/TestFixtureTearDown方法(我的上下文丢失)之后调用了

试图在我的TearDown中使用TestContext.CurrentContext.Result但访问要么StateStatus属性会NullReferenceException :(

回答

2

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

0

我认为你可以使用尝试捕捉你的测试方法内捕捉异常,然后不喜欢里面捕捉截图一些自定义操作赶上。

+0

哦,不,当你有几千个测试时,这不是一个选项。 – UserControl 2012-02-02 09:06:00

+0

您可以告诉我,这是数据驱动的测试,还是您有一千个不同的测试用例。 – 2012-02-02 16:45:35

2

我认为IAddin方法有最有希望,虽然事件侦听可能没有用适当的扩展点您的需要。您是否尝试过TestCaseBuildersTestDecorators一些推广?

例如,TestDecorators文档指出:

目的

TestDecorators能够修改测试它一直后 构成。

扩展点

加载项使用主机通过名称访问此扩展点:

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

传递给安装必须实现 ITestDecorator接口扩展对象:

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

的装饰方法可以做几件事情,这取决于它需要完成:

  1. 返回测试未修改
  2. 修改测试对象的属性并将其返回
  3. 用另一个ob替换测试ject,要么放弃原来的或 聚合它在新的测试。

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

+0

谢谢,但我看不出它有什么帮助。看着NUnit.Core.Test的成员,并没有看到适当的点来获得测试结果:( – UserControl 2012-02-13 08:43:43

3

如果你的意图是运行应用程序的测试,NUnit不是最好的选择,它只是不打算以这种方式使用。 NUnit用于单元测试,而不是集成测试,它将测试您的UI如何与逻辑和数据集成。当单元测试正在运行时(包括那些在nunit下的),没有屏幕截图被捕获 - 测试运行器将输出指向一个日志文件,其中包含您想了解测试的所有信息,包括异常。

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

+1

还有Coded UI,它是与VS2010 Premium/Ultimate一起提供的。 – 2012-02-13 01:16:04

+0

我使用Selenium进行UI测试,生成NUnit兼容的c#代码,但是我想要的是框架不可知的,我只需要捕捉测试失败,特别是当NUnit有它的手段(扩展点和TestContext)时没有什么大不了的。 – UserControl 2012-02-13 08:37:03