NUnit 대 xUnit


110

NUnitxUnit.net 의 차이점은 무엇입니까 ? 둘 중 하나만 개발하는 것이 아니라 두 가지를 개발하는 이유는 무엇입니까?

나는 xUnit이 NUnit의 발명가에 의해 개발되고 있다는 것을 읽었습니다.

xUnit.net은 .NET Framework 용 단위 테스트 도구입니다. NUnit 의 최초 발명가가 작성

반면에 :

NUnit은 모든 .Net 언어에 대한 단위 테스트 프레임 워크입니다. 현재 프로덕션 릴리스 인 버전 2.6은이 xUnit 기반 단위 테스트 도구 의 일곱 번째 주요 릴리스입니다.

그렇다면 진실은 어디에 있습니까?


3
@Joey가 지적했듯이 이것은 연결된 질문의 직접적인 복제가 아닙니다. 이 경우 OP는 근본적으로 무언가를 오해했습니다. 즉 xUnit.net 차이 - 유닛 테스트 도구 및 X 단위 - 유닛 테스트 워크 (NUNIT 때 JUnit 등)의 분류를위한 일반화 된 용어. 재개를위한 투표.
Rob Levine

답변:


131

이 답변을 작성할 당시 최신 NUnit 버전은 v3.5이고 xUnit.net은 v2.1입니다.

두 프레임 워크 모두 훌륭하며, 둘 다 병렬 테스트 실행을 지원합니다 (다른 방식으로). NUnit 은 2002 년부터 사용되어 왔으며 널리 사용되고 잘 문서화되어 있으며 대규모 커뮤니티가있는 반면 xUnit.net 은 더 현대적이고 TDD를 더 잘 준수 하며 확장 가능하며 .NET Core 개발에서 유행하고 있습니다. 또한 잘 문서화되어 있습니다.

그 외에도 내가 알아 차린 주요 차이점은 xUnit.net이 테스트 메서드를 실행하는 방식입니다. 그래서 NUnit 에는 테스트 클래스와 테스트 메서드 세트가 있습니다. NUnit은 테스트 클래스의 새 인스턴스를 만든 다음 동일한 인스턴스에서 모든 테스트 메서드를 실행합니다. 반면 xUnit.net 시험 방법 매우 각 테스트 클래스의 새로운 인스턴스를 생성한다. . 따라서 TDD에서 허용되지 않는 테스트 방법이 서로 의존하기 때문에 필드 또는 속성을 사용하여 테스트 방법간에 데이터를 공유 할 수 없습니다. 따라서 xunit.net을 사용하면 테스트 방법이 완전히 격리되어 있는지 확인할 수 있습니다.

하지만 테스트 방법간에 일부 데이터를 공유하려는 경우 xUnit을 사용하면 그렇게 할 수 있습니다. 따라서 기본적으로 모든 테스트 방법은 완전히 격리되지만 의도적으로 특정 경우에이 격리를 해제 할 수 있습니다. 나는이 태도를 좋아한다. 그것이 내가 더 좋아하는 이유이다.


4
자세한 내용은 내 최신 게시물을 확인의 경우 : codopia.wordpress.com/2017/02/20/...
akazemis은

2
병렬 실행에 대해 작성한 내용은 사실이 아닙니다. 게시물 당시 였을 수도 있지만 지금은 그렇지 않습니다. 이 xunit.net/docs/running-tests-in-parallel을 확인하십시오 . 한 클래스의 테스트 메서드가 병렬로 실행되지 않는다고 말합니다.
Gondil

감사합니다 @Gondil, 당신 말이 맞습니다. 단일 클래스의 메서드를 병렬로 실행하지 않습니다. 병렬 비트를 쥐게
akazemis

1
xUnit이 "잘 문서화되어"있다는 것을 어떻게 알았는지 잘 모르겠습니다. 분명히 그렇지 않습니다. 모든 정보는 NUnit처럼 좋은 문서가 아닌 커뮤니티 소스와 스택 오버플로 질문을 통해 찾아야합니다. 귀하의 답변 이후 xUnit에 대해 정말 흥분했지만 NUnit이 .NET Core에서도 잘 작동하는 것 같다고 생각했습니다.
CularBytes

1
@Loaderon 나는 약 4 년 전에 그것을 게시했고 그 이후로 지금까지 xunit을 사용해 왔습니다. 문서와 커뮤니티는 이전보다 훨씬 나아졌고 이제는 더 성숙해졌습니다. 따라서 XUnit을 안심하고 사용하면 NUnit으로 대체 할 필요가 없습니다. :)
akazemis

33

단일 도구 ( xUnit.net )의 이름을 전체 단위 테스트 프레임 워크 클래스의 이름 ( xUnit , 언어 / 환경을 나타내는 x , 예 : JUnit, NUnit, ...) 과 혼동하고 있습니다.


1
이것이 곧바로 중복되지 않았기 때문에 유감 스럽습니다.-당신이 맞습니다-OP는 거의 동일한 두 용어 사이에서 혼란스러워했습니다.
Rob Levine

혼동이 없도록 제목을 약간 변경했습니다.
루슬란

1
나는 제목이 아니라 귀하의 질문에서 인용구의 강조 표시된 부분으로 이동했습니다. 하지만 내가 당신을 오해했을 수도 있습니다.
조이

8

xUnit 전문가 :

xUnit은 이전의 "SetUp"및 "TearDown"메서드를 피함으로써 새로운 개념을 따릅니다. .NET 개발자처럼해야하는 것처럼 IDisposable과 생성자를 사용해야합니다. 또한 xUnit에는 명확한 컨텍스트 공유 개념이 있습니다.

xUnit 단점 :

테스트 컨텍스트를 가져올 수있는 가용성은 아직 구현되지 않았습니다.


1
"테스트 컨텍스트" 는 무엇입니까 ? 지금까지 구현 되었습니까?
Peter Mortensen

8

xUnit의 한 가지 이점은 다른 클래스에서 테스트를 찾는 것입니다. 병렬로 실행됩니다 . 테스트 케이스가 많은 경우 이렇게하면 많은 시간을 절약 할 수 있습니다.

물론이 기능을 끄거나 작업 (스레드 수, 클래스 당 스레드, 어셈블리 당 테스트 등)을 제어 할 수 있습니다.

하나는 xUnit을 사용하고 다른 하나는 NUnit을 사용하는 두 개의 테스트 프로젝트 로이 샘플 솔루션을 확인하십시오 .

여기 에서 xUnit의 병렬 테스트에 대해 자세히 알아볼 수 있습니다 .


xunit은 같은 클래스에서 테스트를 병렬로 실행하는 다른 방법이 있습니까?
Magesh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.