订阅什么事件处理程序和Assert.AreEqual失败

时间:2009-08-05 04:50:47

标签: nunit

我想在集成测试失败时调用一个方法(即Assert.AreEqual失败),是否有任何我可以在NUnit框架中订阅的事件委托?当然,当测试失败时,必须触发事件委托。

这是因为在我的测试中有很多Assert语句,我不能告诉需要记录Assert,以及导致我的bug跟踪器出现问题的断言信息。执行此操作的最佳方法是在测试失败时调用委托方法。

3 个答案:

答案 0 :(得分:0)

我很好奇,你想通过这样做解决什么问题?我不知道用NUnit做这个的方法,但有一个混乱的方法来做到这一点。您可以提供Func并将其作为失败消息调用。 Func的主体可以为你提供你正在寻找的代表团。

var callback = new Func<string>(() => {
        // do something
        return "Reason this test failed";
    });
Assert.AreEqual("", " ", callback.Invoke());

答案 1 :(得分:0)

似乎在断言失败的情况下我没有订阅的事件

答案 2 :(得分:0)

这听起来像是你想要创建自己的测试运行器。

测试(定义操作)和测试运行(实际运行测试)之间存在区别。在这种情况下,如果要检测测试失败,则必须在运行测试时执行此操作。

如果您要做的就是发送失败的电子邮件,最简单的方法是创建一个运行命令行运行程序的脚本(powershell / batch),然后发送失败的电子邮件(发送到您的错误跟踪系统? )

如果您想要更复杂的交互性,可能需要考虑创建自定义运行器。跑步者可以运行测试,然后根据结果采取行动。在这种情况下,您应该在Nunit.Core命名空间中查找测试运行器接口。

例如(未经测试):

TestPackage package = new TestPackage();
package.add("c:\some\path\to.dll");
SimpleTestRunner runner = new SimpleTestRunner();
if (runner.Load(Package)){
    var results = runner.Run(new NullListener(), TestFilter.Empty, false, LoggingThreshold.Off);
    if(results.ResultState != ResultState.Success){
        ... do something interesting ...
    }
}

编辑:更好的代码段https://stackoverflow.com/a/5241900/1961413