我有一個測試用於檢查一個項目是否正確序列字符串比較斷言失敗時,它看起來像它應該通過
public interface IMyJsIdentity
{
string Forename { get; }
string Surname { get; }
string Guid { get; }
}
public class MyIdentity : IMyJsIdentity
{
public string Forename { get; set; }
public string Surname { get; set; }
public string Guid { get; set; }
public int Id { get; set; }
}
[Fact]
public void SerialiseCorrectly()
{
// Arrange
MyIdentity identity = new MyIdentity()
{
Forename = "forename",
Surname = "surname",
Guid = "abcdefghijk"
};
// Act
string result = JsonConvert.SerializeObject(
identity,
new JsonSerializerSettings()
{
ContractResolver = new InterfaceContractResolver(typeof(IMyJsIdentity))
});
// Assert
result.Should().Be(
"{{\"Forename\":\"forename\",\"Surname\":\"surname\",\"Guid\":\"abcdefghijk\"}}"
);
}
但是我得到的測試失敗
Xunit.Sdk.AssertException: Expected string to be
"{{\"Forename\":\"forename\",\"Surname\":\"surname\",\"Guid\":\"abcdefghijk\"}}" with a length of 66, but
"{{\"Forename\":\"forename\",\"Surname\":\"surname\",\"Guid\":\"abcdefghijk\"}}" has a length of 64.
以下錯誤Json.net對字符串做的事情顯然很特別,但我無法弄清楚什麼。
古怪此通過
result.Should().Be(
String.Format("{{\"Forename\":\"forename\",\"Surname\":\"surname\",\"Guid\":\"abcdefghijk\"}}")
);
我想這不是什麼大不了的事,但我想知道這是爲什麼。
嘗試調試它並查看兩個字符串的內部char數組,這可能會給你一個asnwer什麼可能是錯的。 –
我想這個問題出現在你的'.Should().Be()'方法中。這些字符串是完全相同的長度,但它報告他們是不同的。可能是因爲計數引號的時間越長? – MaineCoder
有任何理由有雙'{{'和'}}'?如果在某個字符串上對該字符串進行了「String.Format」調用,則會將它們轉換爲單個大括號。這也可能是輸出消息中的錯誤信息/錯誤將額外花括號括起來。編輯:同樣,如果你不使用'String.Format'調用,那麼雙括號不會充當轉義字符,除非你打算使用2個大括號,否則不應該將它們加倍。 –