如何将参数传递给接口 IClassFixture<TFixture>?

How can I pass a parameter to the interface IClassFixture<TFixture>?

我正在使用 xUnit 为 .Net 核心编写单元测试。

下面是测试库Class

public class TestBase : IDisposable
{
    TestBase(string filename) {
        ...
        stream = new MemoryStream(File.ReadAllBytes(Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, filename))));
    }
    public TestBase() : this("filename.csv") { }            

    public void Dispose() {
        ..
    }
}

使用方法如下

public class FileProcessingServiceFacadeTest : IClassFixture<TestBase>
{
    TestBase testBase { get; set; }

    public FileProcessingServiceFacadeTest(TestBase testBase) {
        this.testBase = testBase;
    }

    [Fact]
    public void ProcessAsync() {
        ....
    }
}

因为我不知道如何使用接口 IClassFixture 将参数传递给 TestBase class,所以我不得不创建一个构造函数内部调用参数构造函数。

我可以在没有额外构造函数的情况下将参数传递给 interface IClassFixture 吗?

Class(或 Collection Fixtures)仅支持默认构造函数。主要用例是 covered in the docs.

接口只是一个标记,测试运行器使用它来了解给定测试 create/dispose 需要什么 Class。如果 Test Class 上的构造函数请求实例,它会提供它们;如果不是,那也没关系(它们仍然会被创建和处理)

换句话说,你能做的最好的事情就是定义一个基础 class,然后有一个具体的派生 class 来传递文件名。