c# - xUnit.net:为什么这两个等效测试有不同的结果?

标签 c# .net xunit xunit.net surrogate-pairs

由于某种原因,使用 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 中的错误? (我认为这可能与 \uD800surrogate character 的事实有关,并且在传递 InlineData 时它以某种方式被转换为 2 个字符。不确定但为什么。)

最佳答案

尼古拉的回答没有回答问题,但是link给它:

属性值使用 UTF-8 存储,并且隔离的高代理项无法成功从 UTF-16 转换。

这是 (VB.NET) LinqPad query确认情况。

关于c# - xUnit.net:为什么这两个等效测试有不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104766/

相关文章:

c# - WebApp.Start<TStartup> 方法类型参数

c# - Devcomponents SuperGridControl CellButtonClick事件

c# - 为什么 Generic Casting 不适用于这部分代码?

c# - FileStream.Flush() 和 FileStream.Flush(True) 有什么区别?

c# - 可以自动处理 ThreadStatic IDisposable 吗?

xunit - 如何使用 MassTransit 测试工具通过构造函数依赖注入(inject)测试消费者?

c# - 空合并运算符的工作原理

c# - 使用XDocument解析xml,solr结果

c# - 如何在 xunit 中模拟 Db 连接?

c# - 如何在asp.net核心中的x单元单元测试中模拟AutoMapper IConfigurationProvider