我一直使用 Nunit,现在转向 XUnit。
当我不实现
ITestOutputHelper
时,我成功地使用了IClassFixture
,例如:
public myClassTest(ITestOutputHelper outputHelper)
{
this.outputHelper = outputHelper;
}
但是当我实现
IClassFixture
时,我找不到注入ITestOutputHelper
的方法。
我无法实现 ITestOutputHelper 的示例
public class MyIntegrationTests : IClassFixture<TestServerFixture<Startup>>
{
public MyIntegrationTests (TestServerFixture<Startup> testServerFixture)
{
client = testServerFixture.Client;
}
}
我错过了显而易见的事情吗?
它应该通过这样做来发挥作用:
public class MyIntegrationTests : IClassFixture<TestServerFixture<Startup>>
{
public MyIntegrationTests (TestServerFixture<Startup> testServerFixture, ITestOutputHelper outputHelper)
{
client = testServerFixture.Client;
this.outputHelper = outputHelper;
}
}
如
ITestOutputHelper
,所有声明的类和共享灯具都可以通过这种方式提供。
输出窗口(Ctrl-Alt-O)的测试面板中给出什么消息?
现在有一个相当优雅的解决方案:在灯具的构造函数中使用
IMessageSink
类而不是 ITestOutputHelper
。主要好处是您不必以任何方式将 ITestOutputHelper
从测试类传递到夹具类。
夹具类别:
public sealed class PipServiceManager
{
public PipServiceManager(IMessageSink outputHelper)
集合定义:
[CollectionDefinition(nameof(PipTestsCollection))]
public class PipTestsCollection : ICollectionFixture<PipServiceManager>;
测试类中的使用
[Collection(nameof(PipTestsCollection))]
public class InvoicesApplier_Process
这是文档的链接,我在其中找到了它。
请注意,要使
IMessageSink
正常工作,您需要按照以下方式进行配置
这个例子
{
"$schema": "https://xunit.net/schema/current/xunit.runner.schema.json",
"diagnosticMessages" : true
}
我使用 R#,我找不到在其运行程序中查看输出的方法,但是当使用 VS 的默认测试运行程序时,我可以在“输出”->“测试”中找到它。 我需要 CI/CD 机器的诊断功能,所以我可以接受。