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


112

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

[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 # 함수 호출이 작동하는 방식 때문에 변수 추출에 관계없이 동일한 입력을 얻을 수 있음).

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


stuffCollection.Count()별도의 변수에 저장 하고 어설 션에 전달하면 동일한 오류가 발생합니까?
hellyale

아마 이거 ?
Uwe Keim

답변:


112

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

xunit

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


6
감사합니다. FWIW, 빠른 작업이 표시되지 않는 VS Code에서 빌드 할 때 이것을 보았으므로 실제로 경고 메시지에 수정 제안을 포함하면 훨씬 더 도움이 될 것입니다.
Tomas Aschan 2017-10-09

2
@TomasLycken-아. 예 여기에 문제가 있습니다. github.com/xunit/xunit/issues/1423
vcsjones

5
나는 그 행동의 팬이 아닙니다. 때로는 1 카운트가 부수적이며 .Single ()에 대한 호출을 강제하는 것이 덜 표현적인 것처럼 보입니다. 테스트는 다른 개수를 예상하도록 변경 될 수 있으며 숫자를 변경하는 것보다 완전히 다른 메서드를 호출하도록 변경해야하는 것이 성가신 것 같습니다.
vargonian

2
Single은 단일 항목에 적합하고, 3 개의 항목이 있으며 전체 Assert.Collection을 작성하고 싶지 않습니다. xUnit에 Assert.Triple이 있습니까? haha
Pawel Cioch

1
@PawelCioch에 따라 xunit.net/xunit.analyzers/rules/xUnit2013.html 자신이 갖고 Empty, Single그리고 NotEmpty- 당신이 xUnit2013 트리거 안 동적 값을 기대합니다.
mbx

2

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

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

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

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

2
나는 확신, 이것이 해요 하지 ideomatic 방법.
mbx

1

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


-1

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

여기에 이미지 설명 입력

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


문제를 해결했지만 여전히 XUnit을 사용하지 않습니다!
Daniel Eisenreich

8
@DanielEisenreich 1보다 큰 경우 특정 숫자에 대한 개수를 주장하는 올바른 방법은 무엇입니까?
SomeGuyOnAComputer

@SomeGuyOnAComputer 및 다른 4 개의 업 보트. 내가 한 말은 잊어 버려, 나는 너무 건방진했다. 더 큰 경우 다른 선택의 여지가 없습니다.
Daniel Eisenreich
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.