使用来自特定路径的文件名作为 xUnit 中的 MemberData。将 `IEnumerable<string>` 转换为 `IEnumerable<object[]>`

Use file names from specific path as MemberData in xUnit. Convert `IEnumerable<string>` to `IEnumerable<object[]>`

我想为特定路径中的所有文件编写单元测试。例如 - 第一个 运行 将用于文件 x,第二个用于文件 y,等等

但是我在将 IEnumerable<string> 转换为 IEnumerable<object[]> 时遇到问题:

public static IEnumerable<object[]> ExpectedOutputFiles;

public JsonParserTests()
{
    var files = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GetOutputDataFolder()));
    ExpectedOutputFiles = files; // <--- Error is here
}

[Theory]
[MemberData(nameof(ExpectedOutputFiles))]
public void OutputFile_ShouldBeParsedCorrectlyAsJSON_RFC8259(string filename)
{
    // Test parsing output files with Newtonsoft.Json and System.Text.Json
    var json = File.ReadAllText(filename);
    JToken.Parse(json);
    // System.Text.Json have better default options compatible with RFC 8259 specification
    JsonDocument.Parse(json);
}

这可能吗,还是我应该创建 [Fact] 单元测试并在 foreach 循环中读取文件?

将代码从构造函数移至静态成员

public static IEnumerable<object[]> ExpectedOutputFiles() {
    var files = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GetOutputDataFolder()));
    foreach(var file in files) {
        yield return new object[] { file };
    }
}

//...

和return对象数组中的每个文件

引用xUnit Theory: Working With InlineData, MemberData, ClassData