[c#] xUnit에서 컬렉션 크기를 확인하는 관용적 인 방법은 무엇입니까?

내 테스트 스위트에 다음과 같은 테스트가 있습니다.

[Fact]
public void VerifySomeStuff()
{
    var stuffCollection = GetSomeStuff();

    Assert.Equal(1, stuffCollection.Count());
}

이 테스트는 예상대로 작동하지만 실행하면 xUnit이 경고를 출력합니다.

경고 xUnit2013 : Assert.Equal ()을 사용하여 컬렉션 크기를 확인하지 마십시오.

그러나 경고에서 대안이 제안되지 않았으며 Google 검색은이 경고가 인쇄되는지 확인하는 테스트를 위해 xUnit의 소스 코드로 이동합니다.

경우 Assert.Equal()컬렉션의 길이를 확인하는 올바른 방법이 아닌, 무엇입니까?


명확히하기 위해 : 예를 들어 변수를 추출하거나 Assert.True(stuff.Count() == 1)대신 사용하여 xUnit이이 경고를 표시하지 않도록 “속임수”를 사용할 수 있다는 것을 알고 있습니다. 후자는 그냥 해키이고, 전자는 xUnit이 예를 들어.의 다중 반복을 피하려고 시도하는 것처럼 느낀다. IEnumerable<T>이것은 잘못된 방법이다. (문제라면 컴파일러 힌트를 따로 얻을 수 있기 때문이다.) xUnit 자체적으로 입력을 두 번 이상 평가할 필요가 없어야합니다 (사실 C # 함수 호출이 작동하는 방식 때문에 변수 추출에 관계없이 동일한 입력을 얻을 수 있음).

따라서 출력에서 ​​해당 경고를 제거하는 데 관심이 없습니다. 내 질문에 대한 답변은 설명 그 경고가 첫번째 장소에있는 라이브러리에 포함되어 내가 대신 사용해야 접근 뭐든 좋습니다.



답변

Xunit은 대부분의 경고에 대해 빠른 수정을 제공하므로 “옳다”고 생각하는 것을 볼 수 있어야합니다.

xunit

귀하의 경우에는 Assert.Single정확히 하나의 항목을 기대하므로 사용하기를 원합니다 . 412와 같은 임의의 숫자를 주장하는 경우 사용에 대한 경고가 표시되지 않습니다 Count. Single하나의 항목을 기대하거나 항목 이 없을 경우에만 사용을 제안 Empty합니다.


답변

나는 이것이 나에게 같은 오류를주는 것을 발견했다.

Assert.Equal(2, vm.Errors.Count());

그리고 캐스팅하면 오류가 표시되지 않습니다.

Assert.Equal(2, (int)vm.Errors.Count());


답변

목록에있는 단일 요소의 경우 대신 다음을 사용하는 것이 가장 좋습니다.
Assert.Single(resultList);


답변

xUnit에서 아래와 같이 Count 속성을 사용할 때 동일한 문제가 발생했습니다.

여기에 이미지 설명 입력

그 후 컬렉션에서 Count () 함수를 사용하면 문제가 해결되었습니다.


답변