2008-11-07 3 views
18

단위 테스트를 작성할 때 테스트하려는 어셈블리 안에 테스트를 배치합니까? 아니면 별도의 테스트 어셈블리에 배치합니까? 나는 단지 어셈블리를 제외 할 수 있기 때문에 탈주의 용이성을 위해 별도의 어셈블리에있는 클래스의 테스트와 함께 응용 프로그램을 작성했습니다. 누구든지 테스트 할 어셈블리 내에 테스트를 작성합니까? 그렇다면 그 테스트의 정당성은 무엇입니까?단위 테스트를 어셈블리 또는 개별 어셈블리에 쓰십시오?

+0

이 주제에 대한 유용한 정보 : http://stackoverflow.com/questions/347156/do-you-put-unit-tests-in-same-project-or-another-project – Mats

답변

10

나는 인터페이스 프로젝트, 테스트 프로젝트, 도메인 프로젝트 및 데이터 프로젝트가있는 단일 솔루션을 보유하고 있습니다. 내가 공개 할 때 인터페이스를 게시하면 나던 참조 테스트가 컴파일되지 않습니다.

편집 : 결론은 최종 릴리스의 일부가 아니길 바래 야합니다. 별도의 프로젝트/어셈블리를 사용하여 VS에서이 작업을 자동으로 수행 할 수 있습니다. 그러나 동일한 어셈블리에서이 코드를 사용할 수는 있지만 nant 또는 msbuild를 사용하는 경우에는 해당 코드를 컴파일하지 마십시오. 조금 지저분하지만, 물건을 깔끔하게 유지하려면 별도의 어셈블리를 사용하십시오.

5

다른 어셈블리에서. 그렇지 않으면 조립품이 테스트 프레임 워크 (예 : Nunit.Framework.dll)를 참조하므로 고객 시스템에 설치해야합니다.

배송중인 제품이 라이브러리이고 고객이 단위 테스트를 예제로 사용하거나 제공하는 개체를 사용하는 방법에 대한 구체화를 사용하면 생산 어셈블리에 포함 할 때 거의 이점이 없습니다.

9

이것은 널리 인터넷을 통해 토론되고 있습니다.

우리는 테스터 어셈블리가 테스트 된 어셈블리의 모든 내부를 볼 수 있도록 별도의 어셈블리와 InternalsVisibleTo 특성을 사용합니다. 우리는 테스트중인 각 어셈블리에 대해 하나의 테스트 어셈블리를 만드는 경향이 있습니다.

+2

참조 용 +1 InternalsVisibleToAttribute. 링크도 추가해야합니다. http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx –

9

마지막 배포에서 테스트 코드를 통합하려는 경우는 응용 프로그램을 모니터링하고 제어하기위한 테스트 코드가있는 경우입니다. 모든에서

  • 가 진짜 장점에 코드를 bloats - 모든 추가 코드가 함께 태그 것은 현장에서 전혀 사용하지 않을 :

    배포의 테스트 코드를 떠난다.

  • 은 출시에 영향을 미칩니다. - 전체 앱의 새 버전을 출시합니까? 개선 한 부분이 테스트 코드에만있는 경우 (예 : 테스트 슈트는 버그 수정의 결과로 확장됩니다.
  • 다른 프로젝트에서 테스트 프레임 워크를 쉽게 다시 사용할 수 없습니다. - 항상 테스트 코드로 막힌 앱을 출시하는 경우 이후 프로젝트는 동일한 테스트 코드를 다시 사용해야합니다. 그렇지 않으면 앱 A가 앱의 측면에 대해 v1.2의 테스트 플랫폼을 사용하고있는 상황을 마무리합니다. 모든 앱에서 공통으로 사용됩니다 (예 : 프리젠 테이션 레이어 또는 비즈니스 로직 프레임 워크 등. B는 v1.1의 테스트 프레임 워크 인 app을 사용하고 있습니다.

    • 쉽게 업그레이드하고 필요에 따라 테스트 스위트를 확장 : C는 otherhand에

    디커플링 당신이 수 등 V1.2.1을 사용하고 있습니다.

  • 은 여러 프로젝트에서 테스트 스위트를 쉽게 다시 사용할 수 있습니다.
  • 은 여러 프로젝트에서 공통된 테스트 프레임 워크를 사용합니다.

환호 HTH,

+0

'릴리스에 영향을 미치고 테스트 재사용'에 좋은 점 (둘 다 버전 관련). – Fil

0

당신은 솔루션에 별도의 어셈블리에 보관 할 수 있으며, ILMerge 그들 나중에 디버깅 및 출시를 ILMerge하지 않습니다.

관련 문제