2010-05-24 3 views
3

저는 단위 테스트를 처음 사용하고 VS2010을 사용하여 개발하여 테스트를 실행하고 있습니다. 아래에 간단히 설명 된 System.Data.DataTableReader 객체를 비교하는 간단한 테스트가 있습니다. 나는 그들이 동일한 객체 유형, 동일한 입력 파일을 사용하여 생성되고 객체가 "동일하게 보임"했음을 확인 했으므로 동일하다는 것을 알고 있습니다.VS2010에서의 Assert.AreEqual() 예외

두 가지 문제를 처리 할 수 ​​있다는 것을 알고 있습니다. 하나는 Assert.AreEqual 또는이 시나리오를 테스트하기위한 적절한 방법인지 여부이고, 다른 하나는 현재 처리중인 주요 문제입니다. 있는이 테스트는이 예외와 함께 실패 이유 :

public void EntriesTest() 
{ 
    AuditLog target = new AuditLog(); 

    target.Init(); 

    DataSet ds = new DataSet(); 
    ds.ReadXml(TestContext.DataRow["AuditLogPath"].ToString()); 
    DataTableReader expected = ds.Tables[0].CreateDataReader(); 
    DataTableReader actual = target.Entries.Tables[0].CreateDataReader(); 
    Assert.AreEqual<DataTableReader>(expected, actual); 
} 

어떤 도움을 크게 감상 할 수있다 :

여기
Failed 00:00:00.1000660 0 Assert.AreEqual failed. 
Expected:<System.Data.DataTableReader>. Actual:<System.Data.DataTableReader>. 

이 실패 단위 테스트 코드입니다!

답변

6

을 DataTableReader는 Equals 메소드를 오버라이드 (override)하지 않는; 따라서 전화 Equals은 참조 평등 검사가됩니다. 두 개의 서로 다른 참조, 실패한 평등

원하는 것은 컬렉션 주장입니다. 대신 CollectionAssert.AreEquivalent()으로 전화하십시오. 주문이 중요한 경우 CollectionAssert.AreEqual()을 사용하십시오.

+0

이것은 정확히 제가 찾고 있던 것입니다 - 고마워요! –

0

기본적으로 확인은 참조 평등을 수행합니다. 그들은 같은 대상을 참조해야합니다. 독자가 동일한 값을 반환하는지 확인하기 위해 테스트를 변경하는 것이 좋습니다.

2

2 개의 DataReader가 동일한 참조를 갖고 있는지 여부를 확인하는 것은 실제로 두 가지 인스턴스이므로 서로 비교하지 않는 것입니다.

아마도 DataTables를 통과하고 각 행을 비교하는 다른 방법으로 도우미 메서드를 만들거나 CollectionAssert이라고 지적한 것입니다.

0

데이터 판독기로 평등성이 작동하지 않는다고 생각합니다. 두 기록을 비교하려는 경우, 당신은 같은 것을 할 필요가 : 지금까지 내가 말할 수있는

Assert.AreEqual(expected.FieldCount, actual.FieldCount); 
for(int i = 0; i < expected.FieldCount; i++) 
{ 
    Assert.AreEqual(expected[i], actual[i]); 
} 
+2

['CollectionAssert.AreEqual'] (http://msdn.microsoft.com/en-us/library/ms243763.aspx)이 작업을 수행합니다. – Randolpho

0

독자가 제공하는 데이터가 동일하고 독자가 동일하지는 않은지 테스트하려고합니다. 이 결과는 객체 비교 (객체가 메모리 객체에서 동일 함)로 나타나고 결과는 분명히 거짓이 될 것으로 예상됩니다.

데이터를 가져 와서 비교해보십시오.