IEnumerable <SelectListItem>과 같은 옵션 목록을 포함하는보기 모델을 생성하는 컨트롤러에 대한 단위 테스트를 작성하는 중입니다. 예상 된 목록에 뷰 모델의 모든 항목이 포함되어 있는지 확인하고 그 반대의 경우도 확인했습니다. 놀랍게도 이것은 항상 거짓입니다. 그래서 다음 테스트를 만들었습니다 :MVC SelectListItem이 같지 않음을 구현합니까?
[TestMethod]
public void CanEqual()
{
var x = new SelectListItem {Selected = false, Text = "A", Value = "A"};
var y = new SelectListItem { Selected = false, Text = "A", Value = "A" };
Assert.AreEqual(x, y);
}
어설 션은 항상 실패하지만 둘은 동일합니다. SelectListItem이 실제로 Equals를 구현하지 않습니까? 아니면 여기에 뭔가가 누락되어 있습니까?
GrantVS는 "맞음"입니다. SelectListItem은 실제로 자체 Equals를 구현하지 않습니다. 사실 SelectListItem 구현은 자동 구현 된 세 가지 속성 중 하나입니다. 상어의 대답은 (언제나 그렇듯이) 이미 완벽하기 때문에 여기에 추가하십시오. – JimmiTh
SelectListItem에서 제공하는 Equals 메서드는 참조를 확인합니다 (== 연산자가 그렇게 할 것으로 예상 했음). 두 인스턴스를 비교할 수 있도록 확장해야합니까? – GrantVS
@GrantVS : 일부 대안에 대한 답변을 추가했습니다. 하지만 그렇습니다.'=='는 보통 Equals()가 오버라이드 된 경우에도 참조 유형에 대한 ID를 비교할 것입니다. 그러나이 경우에 둘 다 정체성을 비교합니다. 왜냐하면 두 객체가 모두 '객체'에서 곧바로 상속되기 때문입니다. – JimmiTh