6

我想在测试失败时记录一些上下文信息(例如捕获屏幕截图)。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 方法之后调用(我的上下文丢失了)。

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

4

4 回答 4

3

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

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

于 2012-02-13T00:49:52.800 回答
2

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

例如,TestDecorators 文档指出:

目的

TestDecorators 能够在构建测试后对其进行修改。

扩展点

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

IExtensionPoint testDecorators = host.GetExtensionPoint("TestDecorators"); 界面

传递给 Install 的扩展对象必须实现 ITestDecorator 接口:

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

Decorate 方法可能会做几件事,具体取决于它需要完成的任务:

  1. 返回测试未修改
  2. 修改测试对象的属性并返回
  3. 用另一个对象替换测试,要么丢弃原始对象,要么在新测试中聚合它。

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

于 2012-02-12T23:28:12.557 回答
2

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

于 2012-06-20T14:17:04.840 回答
0

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

于 2012-02-02T05:21:22.717 回答