[c#] 단위 테스트, NUnit 또는 Visual Studio?

단위 테스트를 실행하기 위해 Visual Studio (때로는 resharper)를 사용하고 있습니다.

NUnit에 대해 들었지만 그것에 대해 많이 알지 못합니다 …

내가 신경 써야하나요? 비주얼 스튜디오보다 더 나은 것을 제공 할 수 있습니까?

NUnit을 사용해야하며 그 이유는 무엇입니까?



답변

NUnit은 MS-Test에 비해 장점이 거의 없습니다.

  1. Suite 속성-테스트를 ​​집계하고 개별적으로 실행할 수 있습니다 (예 : 빠르고 느린 테스트가있는 대규모 프로젝트에 유용함).
  2. 읽기 가능한 Assert 방법, 예 : Assert.AreEqual(expected, actual)vsAssert.That(actual, Is.EqualTo(expected))
  3. NUnit에는 버전 업데이트가 자주 있습니다. MS-Test에는 VS 버전 당 하나만 있습니다.
  4. Resharper 및 TestDriven.NET을 포함한 많은 통합 러너
  5. 예상되는 예외 메시지 어설 션-NUnit의 속성을 사용하여 수행 할 수 있지만 MS-Test의 Try-Catch를 사용하여 수행해야합니다.
  6. [TestCase]! NUnit은 매개 변수화 된 테스트를 허용합니다.

답변

현재의 관점에서 (평균 10 명의 개발자와 8 개월 간의 개발 후) 다음과 같은 이유로 MSTest 사용을 권장 하지 않습니다.

  • 프레임 워크 자체는 매우 느립니다. 나는 당신이 작성한 테스트 코드를 의미하는 것이 아니라 당신의 통제하에 있습니다. 테스트 스위트, 단일 테스트 등을 실행하든 이러한 테스트를 실행하는 프레임 워크는 느립니다.
  • 여러 개발자가 작업 (예 : 메타 데이터 등을 다시 생성) 할 때 항상 문제를 일으키는 테스트 메타 데이터 파일을 보관해야합니다. 다른 모든 테스트 스위트에는 메타 데이터 파일이 필요하지 않습니다. 테스트를 구성하는 것은 좋지만 네임 스페이스, 클래스 및 메서드 이름을 통해 동일한 결과를 얻을 수 있습니다.
  • 지속적 통합을 수행하고 빌드 머신에서 단위 테스트를 실행하려면 해당 머신에 Visual Studio를 설치해야합니다.

즉, 8 개월 전에 다시 결정해야한다면 아마도 NUnit을 택할 것입니다. 통합 된 테스트 결과 보고서가 없을 수도 있지만 개발자는 더 원활한 테스트 경험을 가질 수 있습니다.


답변

다음은 MS Test에 대한 나의 경험입니다.

  • 우리는 약 3800 Test로 MS Test를 실행하고 있습니다.
  • 테스트가 실행을 시작하는 데는 매우 오래 걸리며 단일 테스트를 실행할 때 고통 스럽습니다.
  • 테스트를 실행하려면 약 1GB 메모리가 필요합니다. 아니요, 테스트의 메모리 누수로 인한 것이 아닙니다. 자주 OutOfMemoryExceptions가 발생합니다.
  • 그렇게 많은 리소스를 사용하기 때문에 배치 파일에서 테스트를 실행하기 시작했습니다. 그렇다면 전체 통합은 어떤 이점이 있습니까?
  • 버그가 있고 불안정합니다.
    • 예를 들어 테스트에서 [Ignore] 속성을 제거하면 테스트에 대한 정보를 어딘가에 캐시하기 때문에 인식하지 못합니다. 때때로 문제를 해결하는 테스트 목록을 새로 고치거나 VS를 다시 시작해야합니다.
    • 참조 어셈블리를 out 디렉터리에 임의로 복사하지 않습니다.
    • 배포 항목 (사용할 추가 파일)이 제대로 작동하지 않습니다. 무작위로 무시됩니다.
  • vsmdi 및 testrunconfig 파일에 숨겨진 (테스트 코드에는 표시되지 않음) 정보가 있습니다. 신경 쓰지 않으면 작동하지 않을 수 있습니다.
  • 기능적으로 NUnit과 비슷할 수 있지만 VS 테스터 에디션을 사용하는 것을 고려하면 비용이 많이 듭니다.

추가 : 우리는 지금 더 많은 테스트를 가지고 있습니다. 얼마나 많은지 말할 수 없습니다. OutOfMemoryExceptions 및 기타 불안정성 문제로 인해 Visual Studio에서 더 이상 모두 실행할 수 없습니다. 스크립트에서 테스트를 실행합니다. Visual Studio에서 테스트 결과를보기는 쉽지만 솔루션이 열리면 VS가 충돌합니다 (매번). 따라서 텍스트 검색을 사용하여 실패한 테스트를 검색해야합니다. 더 이상 통합 도구의 이점이 없습니다.


또 다른 업데이트 : 현재 VS 2013을 사용하고 있습니다. 많은 것들이 바뀌 었습니다. 그들은 우리가 시작한 이래 세 번째로 MS 테스트 실행기를 다시 작성했습니다. 이로 인해 많은 주요 변경 사항이 발생했지만 새 버전은 더 나은 결과를 얻지 못했습니다. MS Test의 멋진 기능이 더 이상 지원되지 않기 때문에 사용하지 않아서 다행입니다. 정말 부끄러운 일입니다. 우리는 여전히 스크립트를 사용하여 모든 단위 테스트를 빌드하고 실행하고 있습니다. Visual Studio는 테스트 실행을 시작하는 데 몇 분이 걸렸습니다 (컴파일 후 첫 번째 테스트가 시작될 때까지의 시간 측정). 그들은 아마도 업데이트로 그것을 고칠 것이고 이것은 우리 프로젝트의 특정 문제 일 수 있습니다. 그러나 Resharper는 동일한 테스트를 실행할 때 훨씬 더 빠릅니다.

결론 : 적어도 Resharper와 함께 사용하면 MS Test가 유용합니다. 그리고 그들이 마침내 테스트 러너가 어떻게 작성되어야하는지 알아 내고 다음에 Visual Studio를 업데이트 할 때 이런 종류의 주요 변경 사항을 수행하지 않기를 바랍니다.


답변

NUnit를 사용할 수 있습니다 함께 비주얼 스튜디오와. 별도의 프로그램이 아닌 프레임 워크입니다. 그래서 당신은 그것이 당신에게 맞는지 살펴볼 수 있습니다 :).

대체 텍스트 http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

“플러그인을 설치하면 도구 메뉴 아래에 새로운 하위 메뉴가 있습니다.”

가져 오기에 대한 자세한 내용 은 http://nunitit.codeplex.com/ 을 참조하십시오 .

또한 SO 검색을 사용하여 많은 것을 찾을 수 있습니다. 이 주제 는 예를 들어 MS 표준 테스트에 비해 NUnit의 장점을 나열합니다.


답변

NUnit에 비해 MS-Test의 가장 큰 장점은 MS-Test가 Reflection을 사용하여 모의 개체를 생성 할 수 있다는 것입니다. 나는 그것이 매우 유용하다는 것을 알았다


답변

NUnit은 VS의 Standard 에디션에서 작동합니다.


답변

다른 사람은 잘 모르겠지만 NUnit은 단위 테스트를 실행할 수있는 멋진 GUI와 콘솔을 제공하며 NUnit 테스트 실행 결과에 대한 보고서를 생성하여 테스트가 실패했는지 또는 통과했는지, 그리고 몇시에 수행했는지에 대한 세부 정보를 제공 할 수 있습니다. 단위 테스트를