我想了解如何使用Likeness<T>()
的CreateProxy()
功能使用兩個簡單類的實例。爲什麼不使用AutoFixture Freeze,SemanticComparison Likeness和CreateProxy進行簡單測試?
public class Band
{
public string Strings { get; set; }
public string Brass { get; set; }
}
具有以下測試中,我用一個Fixture
到Create<T>
一個Band
實例與兩個字符串屬性的值。
[Fact]
public void Equality_Behaves_As_Expected()
{
// arrange
var fixture = new Fixture();
fixture.Customize(new AutoMoqCustomization());
var original = fixture.Create<Band>();
// Brass something like --> "Brass65756b89-d9f3-42f8-88fc-ab6de5ae65cd"
// Strings something like --> "Strings7439fa1b-014d-4544-8428-baea66858940"
// act
var dupe = new Band {Brass = original.Brass,
Strings = original.Strings};
// Brass same as original's like --> "Brass65756b89-d9f3-42f8-88fc-ab6de5ae65cd"
// Strings same as original's like --> "Strings7439fa1b-014d-4544-8428-baea66858940"
我已經嘗試了很多不同的說法,但問題的關鍵似乎是,該CreateProxy
方法不填充的Band
的性質,因此,即使當我嘗試兩個實例與比較Band
相同的屬性值,CreateProxy
方法的實例始終爲空值。
// assert
var likeness = dupe.AsSource().OfLikeness<Band>()
.Without(x => x.Brass).CreateProxy();
// Brass & String properties are null using dupe as source of likeness (!)
//var likeness = original.AsSource().OfLikeness<Band>()
// .Without(x => x.Brass).CreateProxy();
// Brass & String properties are null using original as source of likeness (!)
//Assert.True(likeness.Equals(original)); // Fails
//Assert.True(original.Equals(likeness)); // Fails
// below are using FluentAssertions assembly
//likeness.Should().Be(original); // Fails (null properties)
//original.Should().Be(likeness); // Fails (null properties)
//likeness.ShouldBeEquivalentTo(original); // Fails (null properties)
//original.ShouldBeEquivalentTo(likeness); // Fails (null properties)
}
我得做一些錯的,但我讀過的一切,我可以找到Ploeh博客等,以及我在做什麼不能找到合適的很簡單的比較爲例。有任何想法嗎?
但爲什麼'Assert.True(likeness.Equals(original));'失敗? OP聲明這行代碼也失敗了。不應該通過? – 2013-03-18 17:37:44
因爲這些值未在代理實例上分配。 'Assert.True(likeness.Equals(original));'如果'CreateProxy'將原始測試中的所有屬性從源實例複製到目標實例,則可以通過原始測試。 – 2013-03-18 17:57:30
@尼克斯 - 好吧,所以這裏所說的一個概念是,等式斷言不是雙向的(意思是說,如果使用代理間接修改對象的等同比較器,那麼對象的代理平等必須是行使的 - 不是與其進行比較的對象的平等比較器(如果我使用錯誤的術語,請隨時編輯此評論) – Jeff 2013-03-18 18:07:03