2009-02-28 3 views
4

몇 가지 주요 리팩터링을 수행 할 기존 VS 2005 Std .NET Compact Framework 응용 프로그램이 있습니다. 현재 단위 테스트가되어 있지 않지만 코드를 사용하기 전에이를 추가하고 싶습니다. 나는 이론을 알고 있지만 (실제로는 그것을 구현하지 못했다 : 나는 수치 스럽다 .-)) 여기에 내가 잠시 생각하고있는 몇 가지 질문이있다.NUnit (또는 NUnitLite) 및 .NET CF에 대한 "시작하기"질문

a) 초보자로서 NUnit 또는 NUnitLite (사용하기 쉽다고 주장하는)를 사용해야합니까?

b) 모바일 장치 또는 데스크톱에서 테스트를 실행해야합니까? (물론 장치 별 코드 제외)? 현재 데스크톱은 특히 자동화 된 빌드에서 테스트를 포함하기 때문에 더 매력적으로 보입니다.

c) 일반적으로 테스트 할 클래스는 테스트 프로젝트에 어떻게 포함되어 있습니까? 내 응용 프로그램은 .EXE 파일입니다. 즉, 테스트 프로젝트의 .DLL 어셈블리처럼 참조 할 수 없습니다. 다양한 NUnit 튜토리얼을 살펴 보았지만 그 중 아무런 언급이 없거나 테스트 프로젝트 (yuk!)에 테스트 할 클래스를 복사하여 붙여 넣으라고 제안하는 튜토리얼을 찾았습니다. 테스트 프로젝트의 원본 소스 코드 파일에 링크해야합니까? 개인적인 방법이나 다른 클래스의 의존성은 어떻습니까?

d) 더 나은 테스트 기능을 제공하기 위해 원본 코드를 수정해야합니까? 예 : 개인적인 방법 공개, decouple 등? 이것은 리팩터링과 조금 비슷하기 때문에 테스트가 가능합니다. 나에게 좋지는 않습니다 ... 처음에는 원래 코드를 전혀 건드리지 않는 것이 더 낫습니다. 심지어 코드 커버리지가 적다는 의미입니까?

e) 대부분의 사람들이 사용하는 다른 도구 나 애드온을 조사해야합니까?

미리 답변 해 주셔서 감사합니다. (위의 항목 중 하나 또는 일부에 대해서만 답변 해 주시면 감사하겠습니다).

답변

7

먼저 단위 테스트에 대한 좋은 책인 Pragmatic Unit Testing in C#을 권합니다.

NUnit을 소개 하겠지만, 무엇보다 중요한 것은 작성자가 단위 테스트를 일반적으로 작성하는 방법에 대해 많은 조언을 제공 할 것입니다. xUnit 테스트 프레임 워크는 그리 복잡하지 않으므로 API/워크 플로에 익숙해 질 것입니다. 도전 과제는 경계 조건을 식별하고 커플 링을 줄이며 테스트 가능성을 위해 설계하는 실제 프로세스입니다. eBook (PDF) 또는 인쇄본으로 제공됩니다. 실제 질문 (책도 당신에게 해답을 줄 것이다)에 관한

:

  • @a) 내가 NUnit과 라이트와 경험을했습니다 없습니다, 따라서 나는 당신에게이 시점에 어떤 조언을 줄 수 없습니다.
  • @b) 단위 테스트는 종속성과 관련하여 매우 지역적인 것으로 간주됩니다. 서로 독립적 인 클래스를 테스트하려고하므로 먼저 모바일 장치에 배포 할 필요가 없습니다. 전체 앱을 실행하지 않고 구성 요소를 독립적으로 테스트하면됩니다. 따라서 데스크탑 컴퓨터를 장치 테스트 환경의 대상으로 사용하는 것이 좋습니다. 돌아 오는 시간도 더 좋아질 것입니다.
  • @c) 테스트 프로젝트에서 테스트 할 클래스가 포함 된 어셈블리를 참조해야합니다. 테스트 프로젝트는 어셈블리 자체 (DLL)입니다. 테스트 러너는이 어셈블리를 실행하고 저장된 메타 정보를 사용하여 포함 된 테스트 케이스를 실행합니다.
  • @d) 소프트웨어의 상태와 디자인에 따라 크게 달라집니다.그러나 일반적으로 나는 나누기와 정복 전략을 사용할 것입니다 : 클래스 사이의 인터페이스를 도입하고 단계적으로 리팩터링을 시작하십시오. 구현을 변경하기 전에 단위 테스트를 작성하십시오. 인터페이스는 계약을 유지하고 실행하지만 필요한 경우 기본 구현을 변경할 수 있습니다. 개인용 메서드를 테스트 할 수 있도록 공개하지 마십시오. 개인 메서드는 공용 메서드를 지원하는 클래스의 내부 도우미입니다. 공개 메소드를 테스트하기 때문에 개인 메소드가 올바른 일을한다고 주장 할 것입니다.
  • @e) Visual Studio의 유용한 추가 기능은 TestDriven.Net입니다. NUnit의 GUI 나 콘솔 러너로 변경하지 않고도 IDE에서 직접 NUnit 테스트를 실행할 수 있습니다.
+0

+1 훌륭한 책. 누군가의 충고를 토대로 SO를 구입했으며 전혀 후회하지 않았습니다 (구체적으로는 실용적인 스타터 키트) –

2

@c) VisualStudio에서는 테스트 어셈블리의 프로젝트 참조를 실제 코드 어셈블리에 추가 할 수 있다고 생각합니다. exe 인 경우에도 마찬가지입니다.

개인용 메소드 등은 일반적으로 개인용 메소드를 테스트하지 않습니다. 이론 상으로는 모든 사적인 것들이 공개적이거나 내부적 인 방법에 의해 사용되어야한다. 그러므로 그것들을 테스트하는 것은 간접적으로 사적을 테스트해야한다.

나는 공중과 내부를 시험해 본다. 다른 볼 일 어셈블리의 내부를 만드는 데 사용할 수있는

[assembly:InternalsVisibleTo("MyTestAssembly")] 

: 나는 매우 도움이 한가지 InternalsVisibleTo 속성입니다. 이 속성을 사용하여 내부를 테스트 어셈블리에 노출시켜 직접 참조 할 수 있습니다.