2013-07-08 3 views
2

일부는 TestMethods입니다. JSON serialiser의 구현을 테스트하고 직렬화/직렬화 해제 전후에 두 개의 IList 객체를 비교하지만 비교가 실패한 경우.두 ILIST를 비교할 때 단위 테스트가 실패 함

모델

public class BusinessModel 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

테스트

IList<BusinessModel> model = new List<BusinessModel> 
{ 
    new BusinessModel { ID = 1, Name = "Test1" }, 
    new BusinessModel { ID = 2, Name = "Test2" }, 
    new BusinessModel { ID = 3, Name = "Test3" }, 
    new BusinessModel { ID = 4, Name = "Test4" } 
}; 

[TestMethod] 
public async Task TestSerialiseDeserialiseIsEqual() 
{ 
    ISerialiser serialiser = new Serialiser(); 

    IList<BusinessModel> deserialisedModel; 
    string serialised = string.Empty; 

    serialised = await serialiser.SerialiseAsync<IList<BusinessModel>>(model); 
    deserialisedModel = await serialiser.DeserialiseAsync<IList<BusinessModel>>(serialised); 

    Assert.IsTrue(model.SequenceEqual(deserialisedModel)); 
} 

결과

내가 this 게시물에 시험 방법의 세부 사항의 숫자를 시도했지만 모두 실패.

Assert.AreEqual(t1.Count(), t2.Count()); 

IEnumerator<Token> e1 = t1.GetEnumerator(); 
IEnumerator<Token> e2 = t2.GetEnumerator(); 

while (e1.MoveNext() && e2.MoveNext()) 
{ 
    Assert.AreEqual(e1.Current, e2.Current); 
} 

은 컬렉션 수 항목을 전달하지만 첫 번째 개체 비교에서는 실패합니다.

Assert.IsTrue(model.SequenceEqual(deserialisedModel)); 

Assert.IsTrue failed

CollectionAssert.AreEqual(model.ToArray(),deserialisedModel.ToArray()) 

실패 Collection.AreEqual failed (Element at index 0 do not match)

CollectionAssert.AreEquivalent(model.ToArray(),deserialisedModel.ToArray()) 

실패는이 같은

보일 개체를 확인에서 {"CollectionAssert.AreEquivalent failed. The expected collection contains 1 occurrence(s) of <Helper.Tests.Serialisation.BusinessModel>. The actual collection contains 0 occurrence(s). "}

실패3210

enter image description here

이 질문

취소에 대한 IList의 객체를 비교하는 최고의 방법은 무엇입니까

enter image description here

객체 직렬화 복원

원래 테스트? 내 검사가 실패하는 이유는 무엇입니까?

답변

4

BusinessModel 클래스의 경우 EqualsGetHashCode을 정의해야합니다. 기본 Equals 구현은 참조 평등이며 두 개의 목록에있는 항목의 개체 참조가 서로 다릅니다.

또는 동일/해시 코드를 정의하고 SequenceEquals으로 전달하는 IEqualityComparer<BusinessModel>을 만들 수 있습니다.

+0

고마워요. Equals 및 GetHashCode 메서드를 재정 의하여 문제가 정렬되었습니다. –