2009-10-20 4 views
1

우리 팀에는 응용 프로그램 코드에 대해 실행되는 단위 테스트 라이브러리 집합이 있습니다. 불행히도 (예기치 않은) 예외가 발생합니다. 그 이유는 로깅 코드가 호출되고 객체가 설정되지 않기 때문입니다. 로깅 코드는 PostSharp (메소드 본문 실행 전후에 호출 됨)를 사용하여 설정 한 메소드 속성을 통해 실행됩니다. 속성을 호출하면 안됩니다..NET 조건부 컴파일러 기호 및 단위 테스트 라이브러리

PostSharp가 도움이되는 곳은 다음과 같습니다. 실행하지 말라는 조건부 컴파일러 지시문 (SKIPPOSTSHARP)을 찾습니다. 다시 말해 유닛 테스트가 실행되는 동안 지시문을 정의하면 로깅 측면과는 독립적으로 원하는 코드를 테스트 할 수 있습니다. 따라서 불필요한 종속성을 피하고 복잡한 코드를 성공적으로 피할 수 있습니다.

대단합니다! 하나의 catch를 제외하고 ... 테스트 프로젝트에 대해 정의 된 조건부 컴파일러 지시문은 테스트중인 프로젝트에 대해 정의되지 않습니다. 즉, 테스트중인 코드가 여전히 특성을 사용하고 테스트가 모두 실패 함을 의미합니다.

단위 테스트를 실행할 때만 전체 솔루션에 컴파일러 지시문을 정의 할 수 있습니까? 우리가 전체 솔루션에 적용하지 않더라도 단위 테스트를 실행하는 경우에만 지시문을 특정 프로젝트에 적용 할 수 있습니까?

나는이 접근법에 대한 의견을 듣고 싶다. (우리는 AOP 코드를 통해 분리 성과 확장 성을 얻으려고 노력하고 있지만 진행 과정에서 뛰어 넘기 위해 몇 가지 추가 작업이있는 것으로 보인다).

참고 : 여기서 단위 테스트 만하는 통합 테스트는 아닙니다. 우리는 특정 유닛을 테스트하기를 원하며 로깅 코드가 작동하는지 여부에 상관없이 다른 유닛 테스트 (잘 작동 함)에 의해 테스트를받습니다.

+0

단위 테스트는 어떻게 실행됩니까? msbuild를 사용하여 타겟을 실행하여 단위 테스트를 실행할 수 있습니까? – Khanzor

+0

우리의 테스트는 두 가지 시나리오에서 실행됩니다. A) 로컬 개발 테스트 러너 (ReSharper의 Unit Test Runner) 또는 B) 빌드 서버에서 Gallio through Nant를 실행하는 CI Factory를 통해. 당신의 접근 방식은 재미 있다고 들리지만 (결론적으로 말하면 아직까지 MSBuild에 대해 충분히 알지 못함). 다른 고려 사항은 자동 Nant 스크립트에서 동등한 작업을 얻는 것이지만 MSBuild가 뭔가를 할 수 있다면 Nant는 문제가 없을 것이라고 상상합니다. –

답변

3

테스트를 위해 특수 빌드 구성을 만드는 것이 좋습니다. 단위 테스트가 실행되어 (아마도 일부 MSBuild 속성으로 인해) 프로젝트가 빌드되었는지 여부를 감지하는 데는 몇 가지 방법이 있지만 증분 빌드 시나리오에서는 신뢰할 수 없습니다.

+0

응답에 감사드립니다. 가엘 (PostSharp 키워드를보고 계신 것 같아요. 항상 제품 제작자의 의견을 듣고 친절합니다.). MSBuild에 대한 심층적 인 지식이 없으므로이를 조사하고 그 능력을 확인해야합니다. 당신이 알고있는 어떤 자원이 올바른 방향으로 나를 가리킬 수 있습니까? –

+0

트릭은 Visual Studio 빌드 옵션에서 진단 표시를 활성화 한 다음 관심 조건에 흥미로운 속성이 설정되어 있는지 확인하는 것입니다. 예를 들어, Visual Studio는 프로젝트를 빌드하지 않아도 MSBuild 프로젝트를 실행합니다. 이 경우 BuildingProject 속성은 false로 설정됩니다. 문서에서이를 찾을 수 없습니다. 같은 접근 방식을 사용하면 흥미로운 것을 발견 할 수 있습니다. 그러나 나는 그것이 강력 할 것으로 기대하지 않는다. 나는 정말로 새로운 프로젝트 구성을 만들 것이다. "Debug"및 "Release"를 사용하면 "Test"기능을 사용할 수 있습니다. –