我如何在 Theory inlinData 中使用 hashSet

how i can use hashSet in Theory inlinData

我有一个测试 class,我想为我的一个函数编写一个测试,我必须在 [Theory] ​​inlineData 中使用 HashSet 但我不能使用它。

[Theory]
[InlineData(new HashSet<string>() {"text1","text2"}, "str")]
public void BuildInvertedIndexTest(ISet<string> expectedDocContain, string searchingWord)

我写了 classData 和 memberData 但没有成功。 请指导我。

您不能将 HashSet<T>[InlineData] 一起使用,因为属性仅支持简单类型,例如 stringintbool、数组等

您将需要使用另一种方法来参数化测试,例如 [MemberData] 用于 ISet<T>/HashSet<T>,您可以在此博客中阅读更多信息 post安德鲁·洛克:https://andrewlock.net/creating-parameterised-tests-in-xunit-with-inlinedata-classdata-and-memberdata/

或者,您可以将 string[][InlineData] 一起使用,并从测试正文中构建 HashSet<string>

[Theory]
[InlineData(new string[] {"text1","text2"}, "six")]
public void BuildInvertedIndexTest(string[] expectedDocContain, string searchingWord)
{
    var hashSet = new HashSet<string>(expectedDocContain);
    // TODO Put the rest of your test here.
}

使用 MemberDataAttribute 解决方案可能如下所示:

public static IEnumerable<object[]> BuildInvertedIndexTestData()
{
    yield return new object[] { new HashSet<string>() { "text1", "text2" }, "str" };
    yield return new object[] { ... };
}

用法如下所示:

[Theory, MemberData(nameof(BuildInvertedIndexTestData))]
public void BuildInvertedIndexTest(ISet<string> expectedDocContain, string searchingWord)

我还没有测试过这个解决方案,所以您可能需要将 expectedDocContain 参数的类型更改为 HashSet<string>