我想在测试失败时记录一些上下文信息(比如捕获屏幕截图)。 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
,但访问State
或Status
属性抛出NullReferenceException
:(
答案 0 :(得分:3)
如果你的目的是运行你的应用程序的测试,NUnit不是最好的选择,它只是不打算这样使用。 NUnit用于单元测试,而不是集成测试,它将测试UI如何与逻辑和数据集成。当单元测试正在运行时(包括那些在nunit下运行),没有捕获截图 - 测试运行器将输出定向到一个日志文件,其中包含您可能想要了解的有关测试的所有信息,包括例外。
如果您正在尝试进行UI测试,我建议您使用Watin进行WebApp测试,White进行WPF / Winforms应用测试。
答案 1 :(得分:2)
我认为IAddin方法最有希望,尽管EventListeners可能没有适当的扩展点来满足您的需求。您是否尝试过TestCaseBuilders或TestDecorators扩展?
例如,TestDecorators文档说明:
<强>目的强>
TestDecorators能够在测试完成之后对其进行修改 构造
扩展点
Addins使用主机按名称访问此扩展点:
IExtensionPoint testDecorators = host.GetExtensionPoint( “TestDecorators”);接口
传递给Install的扩展对象必须实现 ITestDecorator界面:
public interface ITestDecorator { Test Decorate( Test test, MemberInfo member ); }
Decorate方法可以做几件事,具体取决于它需要完成的事情:
- 未经修改的返回测试
- 修改测试对象的属性并将其返回
- 将测试替换为另一个对象,丢弃原件或 在新测试中汇总。
醇>
这听起来像是尝试使用自定义代码包装测试的好地方。
答案 2 :(得分:2)
升级到NUnit 2.6 TestContext.CurrentContext
开始按预期工作。
答案 3 :(得分:0)
我认为您可以在测试方法中使用try catch来捕获异常,然后执行一些自定义操作,例如在catch中捕获屏幕截图。