2

何らかの理由で、このテストを利用する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であるという事実と関係があるかもしれないと思います、そしてそれが通過するときにどういうわけか2文字に変換されています.しかし、理由はわかりません.)InlineData

4

2 に答える 2

1

ニコライの答えは質問には答えませんが、それにリンクしています:

属性値は UTF-8 を使用して保存され、分離された上位サロゲートは UTF-16 から正常に変換できません。

これは、状況を確認する(VB.NET) LinqPad クエリです。

于 2016-03-20T12:02:29.543 に答える