由于某种原因,使用 InlineData
的测试在 xUnit 中失败:
[Theory]
[InlineData("\uD800", 1)]
public static void HasLength(string s, int length)
{
Assert.Equal(length, s.Length);
}
而使用 MemberData
的函数则传递:
public static IEnumerable<object[]> HasLength_TestData()
{
yield return new object[] { "\uD800", 1 };
}
[Theory]
[MemberData(nameof(HasLength_TestData))]
public static void HasLength(string s, int length)
{
Assert.Equal(length, s.Length);
}
这是什么原因呢?我是否发现 xUnit.net 中的错误? (我认为这可能与 \uD800
是 surrogate character 的事实有关,并且在传递 InlineData
时它以某种方式被转换为 2 个字符。不确定但为什么。)
最佳答案
关于c# - xUnit.net:为什么这两个等效测试有不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104766/