出于某种原因,使用$('#filter_pic').prop('checked')
的此测试在xUnit中失败:
InlineData
虽然这使用[Theory]
[InlineData("\uD800", 1)]
public static void HasLength(string s, int length)
{
Assert.Equal(length, s.Length);
}
,但却通过了:
MemberData
这是什么原因?我在xUnit.net中发现了一个错误吗? (我认为这可能与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);
}
是surrogate character的事实有关,并且在通过\uD800
时以某种方式被翻译为2个字符。不知道为什么但是。)
答案 0 :(得分:1)
不,这不是一个错误。
如果要在UTF-16中表示大于U + FFFF的值,则需要使用两个UTF-16代码单元:高代理(在0xD800到0xDBFF范围内),然后是低代理(在范围0xDC00到0xDFFF)。所以一个高代理人本身就没有意义。它本身就是一个有效的UTF-16代码单元,但只有在低代理项后才有意义。
本文http://codeblog.jonskeet.uk/2014/11/07/when-is-a-string-not-a-string/
中的更多信息答案 1 :(得分:1)