我對流利的斷言有一個問題,這似乎違背了檔案的說明。我有這個簡單的案例來說明問題。
public class UnitTest1
{
[Fact]
public void Test1()
{
var test = new Test { Name = "Test", Value = "123" };
var testDto = new TestDto { Name = "Test" };
test.Should().BeEquivalentTo(testDto);
}
}
public class Test
{
public string Name { get; set; }
public string Value { get; set; }
}
public class TestDto
{
public string Name { get; set; }
}
我希望這個測驗會失敗,因為 TestDto 類上不存在“Value”屬性。
該檔案指出,根據這句話,我的理解是正確的。
Order 物件的所有公共成員必須在具有相同名稱的 OrderDto 上可用。如果缺少任何成員,將引發例外。
我是否理解錯誤,或者這是 Fluent Assertions 中的問題?
uj5u.com熱心網友回復:
這是預期的行為。TestDto Fluent Assertion 通過匹配on的暴露屬性來評估物件圖Test。
嘗試顛倒順序,斷言按預期失敗。
public class UnitTest1
{
[Fact]
public void DoesNotFail()
{
var test = new Test { Name = "Test", Value = "123" };
var testDto = new TestDto { Name = "Test" };
test.Should().BeEquivalentTo(testDto);
}
[Fact]
public void WillFail()
{
var test = new Test { Name = "Test", Value = "123" };
var testDto = new TestDto { Name = "Test" };
testDto.Should().BeEquivalentTo(test);
}
}
uj5u.com熱心網友回復:
Fluent Assertion 的規范說,預期物件的所有公共成員必須在測驗物件上可用,否則將引發例外:
testObject.Should().BeEquivalentTo(expectedObject);
如果你替換
- 預期物件-> 測驗
- 測驗物件-> testDto
testDto.Should().BeEquivalentTo(test);
然后它將按您的預期作業,它會拋出例外。
但是,如果您像以前那樣替換這兩個物件,它不會拋出例外,因為在這種情況下,預期 ( testDto ) 的所有道具都存在于 testObject ( test ) 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/464435.html
