2012-03-09 3 views
11

문제가있는 것 같습니다. 우리가 사용하는 응용 프로그램은 Ninject 커널을 사용하며 WCF 호출 내용 (사용자 이름, 토큰 ...)으로 수집 된 특정 구성을 포함합니다.).NUnit을 사용하여 다른 appdomain에서 단위 테스트 실행

특정 구성에 따라 사용자에게 앱에 대한 권한이 할당되며 이는 Ninject 커널의 특정 인스턴스를 통해 보호됩니다.

우리는 단지 Ninject 커널을 재구성 할 수는 없지만 Nunit 테스트를 두 번 실행하지만 각기 다른 응용 프로그램 도메인에서 실행합니다 (다른 설정으로 커널을 다시 생성).

다른 앱 도메인에서는 전체 테스트 프로젝트를 실행할 수 있지만 테스트 당 테스트는 할 수 없습니다.

해결 방법이 있습니까?

불행히도 Ninject 구성이 우리 편이 아니기 때문에, 우리는 이런 방식으로 '살아야합니다'.

답변

5

NUnit 코드의 일부를 다시 작성하지 않고도이를 해결할 방법이 없다고 생각합니다. NUnit 코드 안에 들어간 지 오래되었지만 메인 앱 도메인 로딩 부분이 변경되지 않았 음을 확신합니다.

일반적으로 NUnit은 2 개의 앱 도메인을 사용합니다. NUnit이 실행될 때 생성되는 기본 테스트 및 테스트 어셈블리 및 참조하는 어셈블리를로드하는 별도의 테스트입니다. 이 작업을 수행하는 주된 이유는 테스트 어셈블리를 언로드 할 수 있기 때문입니다. dll은 언로드 할 수 없지만 appdomain을 언로드 할 수는 있습니다.

테스트 당 NUnit을 한 번 실행하고 명령 줄에서 테스트를 통과 할 수는 있지만 추한 것이고 도움이 될지 잘 모르겠습니다.

NUnit 2.6에 Action Attributes을 사용하는 것도 가능하지만, 거기에서 많은 작업을 수행 할 것입니다.

설정 방법에 새 앱 도메인을 만들고 각 테스트에서이 도메인을 호출 할 수도 있습니다. 어색하지만 가능합니다.

더 자세히 답변하지 못해 죄송합니다.

1

귀하의 질문에 대해 확실하지 않습니다. 그러나 사용자 지정 구현이 필요합니다. 맞춤 테스트 속성을 고려 했습니까? 그런 다음 각 속성이 다른 앱 도메인에서 실행되도록 구성 할 수 있습니까? 나는 몇 가지 아이디어를 만들어 내고 있지만, 더 나은 방법이있을 수 있습니다.

+1

xUnit의 기본적으로이 작업을 수행 ... –

25

정확히 동일한 작업을 수행해야하므로 기본적으로 현재 테스트를 수행하고 새 AppDomain에서 다시 실행하는 라이브러리를 만들었습니다. NUnit.ApplicationDomain이라고하는 너겟 패키지이며 open source입니다.

예제 코드 :

[Test, RunInApplicationDomain] 
public void Method() 
{ 
    Console.WriteLine("I'm in a different AppDomain") 
} 
관련 문제