如何创建实现IXunitSerializable与IOutputTesthelper的XUnit测试类并独立显示用例?
能否创建兼容
IOutputTestHelper与IXunitSerializable的Xunit测试类以显示独立测试用例? 你提到的方案不可行,核心原因是Xunit测试类仅允许定义一个公共构造函数,而你给出的示例代码中同时声明了无参构造函数(用于序列化)和带参构造函数(注入ITestOutputHelper),这违反了Xunit的规则。
你原本的思路是通过实现IXunitSerializable接口的Serialize和Deserialize方法,让测试运行器完成测试类的序列化与反序列化,从而在测试资源管理器中展示独立测试用例,对应的示例代码如下:
public class MyTestClass : IXunitSerializable, IOutputTestHelper { public string Name { get; set; } public ITestOutputHelper Output { get; set; } public MyTestClass() { } public MyTestClass(string name, ITestOutputHelper output) { Name = name; Output = output; } public void Serialize(IXunitSerializationInfo info) { info.AddValue(nameof(Name), Name); } public void Deserialize(IXunitSerializationInfo info) { Name = info.GetValue<string>(nameof(Name)); } [Theory] [InlineData("Alice")] [InlineData("Bob")] public void TestName(string name) { Output.WriteLine($"Hello, {name}!"); Assert.Equal(Name, name); } }
问题分析
Xunit的测试类构造函数规则明确:一个测试类只能有一个公共构造函数。当你同时提供无参和带参构造函数时,Xunit无法确定使用哪个构造函数来实例化测试类,进而导致测试无法正常执行,更无法实现你期望的独立测试用例展示效果。
内容的提问来源于stack exchange,提问作者ironsight
相关产品推荐
相关产品推荐

