【问题标题】:Catching asserts in NUnit在 NUnit 中捕获断言
【发布时间】:2012-02-01 22:06:14
【问题描述】:

我想在测试失败时记录一些上下文信息(例如捕获屏幕截图)。 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 :(

【问题讨论】:

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


    【解决方案1】:

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

    如果您尝试进行 UI 测试,我推荐 Watin 用于 WebApp 测试,White 用于 WPF/Winforms 应用测试。

    【讨论】:

    • 还有 Coded UI,它在 VS2010 Premium/Ultimate 的盒子里。
    • 我使用 Selenium 进行 UI 测试,生成 NUnit 兼容的 c# 代码。但是我想要的是框架不可知论。我只需要捕捉测试失败。没什么大不了的,尤其是当 NUnit 有它的方法时(扩展点和 TestContext)。
    【解决方案2】:

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

    例如,TestDecorators 文档指出:

    目的

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

    延伸点

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

    IExtensionPoint testDecorators = host.GetExtensionPoint( “测试装饰器”);接口

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

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

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

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

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

    【讨论】:

    • 谢谢,但我看不出它有什么帮助。查看了 NUnit.Core.Test 的成员,发现没有合适的点来获得测试结果:(
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 哦,不。当你有几千个测试时,这不是一个选择。
      • 你能告诉我这是一个数据驱动的测试还是你有上千个不同的测试用例。
      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 2019-11-21
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多