Xunit.net TestOutputHelper 无法与 C# 库项目一起工作的问题

Problem of Xunit.net TestOutputHelper not working with C# Library project

测试环境:

.NET 6 控制台应用程序,带有 C# 中的 class 库 视觉工作室 2022 套餐:
Xunit 2.4.2 Xunit.runner.visualstudio2.4.3

问题描述:

我正在使用 TestOutputHelper(在 XUnit.sdk 中提供)测试 Xunit 测试结果的输出消息

当对控制台应用程序中的对象进行单元测试时,输出消息正常工作:XunitCollection。

但是,在针对 class 库中的对象进行测试时它不起作用:ServiceManager(请参阅最后的测试输出中的详细信息)。没有编译器错误。 ServiceManager 已添加为 ServiceManagerTest 中的项目引用。

为什么它在针对 C# 控制台应用程序进行测试时有效,但在针对 class 库进行测试时却无效?

测试代码:

----- Class 要在 IBRARY 中测试的随机发生器:SeviceManager ----

{
    public class Randomizer
    {
        public int RndNumber { get; private set; }
        private Random _rnd;
        public Randomizer()
        {
            _rnd = new Random();
            RndNumber = _rnd.Next();
        }

        public void RandomWithRange(int lower, int upper)
        {
            RndNumber = _rnd.Next(lower, upper);
        }
    }
}

------单元测试用例------

using Xunit;
using Xunit.Sdk;

namespace ServiceManagerTests
{
    public class OutputMessageTest
    {
        private TestOutputHelper _outHelper;

        public OutputMessageTest(TestOutputHelper outHelper)
        {
            _outHelper = outHelper;
        }

        [Fact]
        public void WriteMessageTest()
        {
            _outHelper.WriteLine("First Message added to the test result");

            Assert.True(true);
        }
    }
}

------ 失败测试的输出 ------

 ServiceManagerTests.OutputMessageTest.WriteMessageTest
  Source: OutputMessageTest.cs line 16
  Duration: 1 ms

  Message: The following constructor parameters did not have matching fixture data: TestOutputHelper outHelper

您应该将接口 ITestOutputHelper 而不是具体的 class TestOutputHelper 注入到您的测试装置中,即

private ITestOutputHelper _outHelper;

public OutputMessageTest(ITestOutputHelper outHelper)
{
    _outHelper = outHelper;
}

[Fact]
public void MyFact()
{
    _outHelper.WriteLine("Foo");
}

XUnit 不会解析具体的 class,并且可能会给您 运行 时间错误:

The following constructor parameters did not have matching fixture data: TestOutputHelper outputHelper