我試圖斷言集合Claim
包含一組預期的索賠。我似乎遇到的問題是,無法檢查子集並提供我自己的等同選項。應該()。包含()與等價選項
var expected = new[] {
new Claim(ClaimTypes.Name, "joshdev"),
new Claim(ClaimTypes.Email, "[email protected]"),
new Claim(ClaimTypes.GivenName, "Josh"),
new Claim(ClaimTypes.Surname, "Perry"),
};
var identity = GetIdentity();
我已經試過......
identity.Claims.ShouldAllBeEquivalentTo(expected, options => options.Including(x => x.Type).Including(x => x.Value));
如果身份的說法是不準確的預期設定的,例如這將失敗不僅僅是這些索賠。
identity.Claims.Should().Contain(expected);
失敗的原因Contain
只需使用object::Equals
方法將Claim
型沒有實現。
我需要的是一些方法來做Contain
但與ShouldAllBeEquivalentTo
曝光相同的等效選項。我想也許ShouldBeEquivalentTo
將是我想要的,但它提供了斷言集合對象本身,而不是集合中的項目。
如何定義兩個「Claim」是否相等?所有領域相同或只是一組「關鍵」字段? –
在這個特定的測試用例中,「Equal」只意味着'Type'和'Value'屬性是相等的。 (請參閱第一個斷言,'options.Including ...')理想情況下,我希望能夠提供像ShouldAllBeEquivalentTo這樣的等價選項,但具有「Contains」的語義,或者以某種方式指定類似於「IEqualityComparer' 。 –
joshperry