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
测试环境:
.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