使用IClassFixture时输出XUnit .net core测试结果

问题描述 投票:0回答:2

我一直使用 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;
    }
}

我错过了显而易见的事情吗?

c# asp.net-core-webapi xunit.net
2个回答
5
投票

它应该通过这样做来发挥作用:

public class MyIntegrationTests : IClassFixture<TestServerFixture<Startup>>
{
    public MyIntegrationTests (TestServerFixture<Startup> testServerFixture, ITestOutputHelper outputHelper)
    {
        client = testServerFixture.Client;
        this.outputHelper = outputHelper;
    }
}

ITestOutputHelper
,所有声明的类和共享灯具都可以通过这种方式提供。

输出窗口(Ctrl-Alt-O)测试面板中给出什么消息?


0
投票

现在有一个相当优雅的解决方案:在灯具的构造函数中使用

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 机器的诊断功能,所以我可以接受。

© www.soinside.com 2019 - 2024. All rights reserved.