Assert.AreEqual은 POCO에서 실패합니다. 그러나 POCO의 개별 항목에 대해서는 실패하지 않습니다. VS 2010에서 전체 POCO를 작동시키는 방법POCO에서 Assert.AreEqual 패스를 만드는 방법
답변
POCO가 Equals
을 적절한 방식으로 덮어 씁니까? 그렇지 않다면 그것은 문제입니다. Equals
및 GetHashCode
을 무시하면 문제가 없습니다.
평등이라는 개념이 하나만 있다고 가정합니다. 또 다른 방법은 IEqualityComparer<T>
을 다른 클래스에 구현하여 사용하는 것입니다. (Assert.AreEqual
이 선택 사항 인 IEqualityComparer<T>
매개 변수를 사용하는지 여부는 모르지만 명시 적으로 항상 호출 할 수 있습니다.)
expected objects library을 살펴볼 수 있습니다. 매우 정교하고 모든 뒤에서 비교 로직을 처리하여 코드를 훨씬 쉽고 가볍게 만듭니다. 유형을 무시하도록 말할 수도 있습니다. 따라서 객체의 몇 가지 속성을 확인하고 싶다면 객체와 비교할 수 있습니다.
개체가이 아니기 때문에 테스트에 실패했습니다. 자기들의 들판에서 같은 값을 가질 수도 있지만, 이것이 동일하지는 않습니다. 기본적으로 객체는 동일한 주소를 가지기 때문에 동일한 객체입니다.
원하는 동작 (동일한 값을 가진 속성을 가진 개체를 동일하게 만들기 위해)을 얻으려면 Equals
을 재정의하고 개체를 동일하게 만드는 것이 무엇인지 정의해야합니다. 이것이 모두 속성이면 여기에서 모든 속성을 확인하십시오. 그것이 단지 일부인 경우에만 확인하십시오. 당신의 맥락에서 평등을 결정하기 위해해야 할 일을하십시오.
Equals
을 재정의하는 경우 GetHashCode
도 무시하고 Equals
이 두 개의 개체에 대해 true 일 때 GetHashCode
이 둘 모두에 대해 동일한 값을 반환하는지 확인해야합니다.
- 1. VS2010에서의 Assert.AreEqual() 예외
- 2. MSUnit : Assert.AreEqual trees가 실패합니다.
- 3. WCF DataService, POCO에서 [DataServiceKey]를 피하는 방법
- 4. POCO에서 보고서를 실행하려면 어떻게해야합니까?
- 5. POCO에서 OData 사용
- 6. MbUnit에 Assert.AreEqual 날짜 시간과 진수는하지
- 7. 모든 phpmyadmin 사용자/패스를 리눅스에 나열하는 방법
- 8. 클래스 C#의 패스를 취득
- 9. 엔티티 POCO에서 사용자 정의 데이터 유형 사용?
- 10. Eclipse는 리소스 패스를 바꿀 수있는 방법입니다.
- 11. 클래스 패스를 이해하는데 혼란이 있음
- 12. 패스를 통해이 같은 쿼리 내가 SQL 서버가
- 13. 문제 해결 git push - 사용자/패스를 묻습니다.
- 14. Spring Security OAuth에서 패스를 커스터마이즈/oauth/user/authorize하는 방법 OAuth
- 15. 보안 문자 바이 패스를 막기위한 전략
- 16. 허드슨은 메이븐 생성 클래스 패스를 사용하지 않습니까?
- 17. 비 플러그인 LLVM 패스를 만들려면 어떻게해야합니까?
- 18. web.config 인증에 사용자 정보/패스를 저장합니다.
- 19. PHP에서 참조로 패스를 사용하는 것이 좋은가요?
- 20. C++ lint : 부적절한 패스를 값으로 검출하십시오.
- 21. 현재 값을 POCO에서 DynamicProxy에 적용하면 복잡한 개체에 오류가 발생합니다.
- 22. 개체를 만드는 방법 다른 개체를 만드는 방법
- 23. 누군가가 이미지로 패스를 칠하는 데 사용할 수있는 CGPattern을 만드는 방법을 보여 주실 수 있습니까?
- 24. Assert.AreEqual failed. 예상 : <(null)>. 실제 : <System.Web.Mvc.ViewResult>
- 25. Assert.AreEqual 내가 주장 할 수있는 방법은 여러 예상 값
- 26. Assert.AreEqual (1.0, double.NaN, 1.0)이 통과하는 이유는 무엇입니까?
- 27. 작업 단위 패턴을 사용하여 POCO에서 하위 항목을 삭제할 수 없습니다.
- 28. GWT 서버 측에서 일반 Java 클래스에 대한 참조를 만드는 방법
- 29. sudo 서버 액세스로 mysql 루트 패스를 복구 할 수 있습니까?
- 30. Subversion이 Windows 인증을 사용하도록 설정했지만 사용자/패스를 묻는 메시지가 표시됩니다.
이것은 옵션 일 수 있지만, 프레임 워크에서 많은 메소드와 클래스를 사용할 때 객체가 동일하다고 생각할 수 있으므로주의해야합니다. . 즉, 객체가 여전히 콜렉션의 일부로 간주되지 않을 것입니다. 이것은 체크를 수행하기 위해 'Equals'를 사용할 것이기 때문입니다. 그리고 이것이 OP의 'Assert.AreEqual' 사용에 대해서는 다루지 않을 것이라고 생각합니까? ExpectedObject에서 어설 션을 사용해야합니다. 내가 뭔가를 오해하고있는 것이 아니라면 ... –
@ 샘, 무슨 뜻인지 모르겠다. 이 예상 객체 라이브러리는 프로덕션 코드에서는 사용되지 않지만 단위 테스트에서만 사용되므로 실제 평등이 중요하지 않으므로 테스트에서받은 객체가 예상 한 것임을 확인하는 것이 사용됩니다 . 모든 분야가 동등하다고 기대하든, 또는 일부 분야가 당신에게 달려 있는지를 신경 써야합니다. 테스트에서 객체의 평등을 검사하는 유일한 목적을 가진 코드가있는 poco와 같은 단순한 것을 망칠 때 감각을 보지 못합니다. –
OP가 'Assert.Equal'을 사용하여 생성 한 두 객체가 실제로 같으면 객체가 예상했던 것과 다른지 확인합니다. 예상 객체는 테스트를 단순화하는 데 도움이 될 수 있지만 테스트의 ** 점 **이 동일한 값을 갖는 두 객체를 만들고 서로 동일하다고 간주되는지 확인하는 것이 전혀 도움이되지 않습니다. 첫 번째 값을 확인하기 위해 두 번째 개체를 만드는 경우이 값을 볼 수는 있지만 OP 질문에서 명확하지 않습니다. 나는이 구별을 명확하게하고 싶었다. –