【发布时间】:2019-07-18 22:45:02
【问题描述】:
我正在构建一个基于 .Net Core 的 selenium 测试框架,团队决定使用 xUnit。一切顺利,一切顺利,但有一段时间以来,我们一直在尝试复制 Java TestNG 侦听器的功能,但运气不佳。
我一直在挖掘 xunit git repo 并发现一些使用诸如ITestListener 之类的接口的实例。在深入挖掘之后,我发现这些监听器来自一个名为 TestDriven.Framework 的包,我想知道如何使用使用这些接口创建的测试监听器?
到目前为止,这是我的简单测试监听器,当测试失败时应该写一些东西:
public class Listener
{
readonly int totalTests;
public Listener(ITestListener listener, int totalTests)
{
this.totalTests = totalTests;
TestListener = listener;
TestRunState = TestRunState.NoTests;
}
public ITestListener TestListener { get; private set; }
public TestRunState TestRunState { get; set; }
public void onTestFail(ITestFailed args)
{
Console.WriteLine(args.Messages);
}
}
现在,我知道您可以在拆卸钩子中执行此操作,但请记住,这只是一个简单的示例,我想到的是更复杂的东西。所以准确地说,我将在哪里/如何注册测试以使用这个监听器?在 Java TestNg 中我会使用 @Listeners,但在 C# 中我不太确定。
编辑 1 所以该示例工作并设法将其添加到我自己的项目结构中,但是当我尝试使用它时
class TestPassed : TestResultMessage, ITestPassed
{
/// <summary>
/// Initializes a new instance of the <see cref="TestPassed"/> class.
/// </summary>
public TestPassed(ITest test, decimal executionTime, string output)
: base(test, executionTime, output) {
Console.WriteLine("Execution time was an awesome " + executionTime);
}
}
我在注册这个时遇到了问题,或者我什至注册正确。就示例而言,我找到了实际的消息接收器,但也找到了我不确定如何使用的实际测试状态数据。
【问题讨论】:
-
所以您在编辑 1 中的目标是收听“测试通过”消息?我将更新我的答案以证明...
-
是的,我的总体目标是能够根据不同的测试状态和测试事件做一些事情。使用您的示例,我可以抽象出粗略的 if/else 方法并实现更好的方法。如果您愿意,您可以使用更好的示例为未来的人更新示例,显示更多测试状态,例如通过、跳过、失败、开始、完成等等。一般的例子是相同的使用接口
ITestFailedITestSkipped等等
标签: c# .net selenium xunit xunit.net