2012-03-13 4 views
1

xUnit.net 테스트 프레임 워크, Moq 및 스텁을 생성하는 Moles Isolation 프레임 워크를 사용하는 Visual Studio 2010 (.NET 4)의 단위 테스트 프로젝트가 있습니다. 정적 메소드. xUnit 버전 1.9를 64 비트 컴퓨터에서 사용하고 있습니다. 명령 줄에서 테스트를 실행하려면Moles와 xUnit.net을 사용하여 단위 테스트를 실행하는 처리되지 않은 MethodAccessException

, 나는 다음과 같은 명령을 사용하고 있습니다 :

moles.runner.exe Project.Tests.dll는

을 /runner:xunit.console.clr4.exe

그러나, 나는 다음과 같은 예외 때마다 얻을 :

가 인스트루먼트를 ... xUnit.net 콘솔 테스트 러너 (64 비트 .NET 4.0.30319.1) 저작권 (C) 2007-11 마이크로 소프트 코퍼스 시작 .

되지 않은 예외 : System.MethodAccessException는 : 보안 투명한 방법으로 시도 'Xunit.ConsoleClient.Program.Main (선택 System.String [])' 보안 중요한 방법 'System.AppDomain.add_UnhandledException 액세스 행 (System.UnhandledExceptionEventHandler) ' 실패했습니다. Xunit.ConsoleClient.Program.Main (String [] args)에 Microsoft.Moles.Runner.MolesRunner.RunnerRunner.Run (문자열 러너, 문자열 [] 인수) 에서 Microsoft.Moles.Runner.MolesRunner.RunnerRunner.Run (문자열 주자 문자열 [] 인수) Microsoft.Moles.Runner에서 Microsoft.Moles.Runner.MolesRunner.RunnerMain에서 Microsoft.Moles.Runner.MolesRunner.LaunchRunnerEntryPoint (MolesRunnerOptions 옵션) (문자열 [] 인수)에서. Program.Main (String [] args)

예외가 xUnit에서 오는 것처럼 보입니다. 그러나 문제없이 xunit.console.clr4.exe 만 사용하여 테스트를 실행할 수 있습니다. Moles 러너의 xUnit 콘솔을 사용할 때만 실패합니다.

나는 포럼 게시물에 발견 : 닷넷 4 프레임 워크에서

는 보안 tranparency 규칙은 보안이 중요한 코드로 호출에서 모든 보안 투명 코드를 방지 할 수 있습니다.

이 오류의 원인을 확인하려면 어떻게해야합니까? 이를 방지하기 위해 변경해야 할 보안 설정이 있습니까?

참고 : 32 비트 워크 스테이션에서도 똑같은 문제가 발생합니다.

업데이트 : 코드를 다운로드하여 http://xunit.codeplex.com/SourceControl/changeset/changes/600246119dca에서 다운로드하고 직접 디버깅하기로 결정했습니다. xunit.console 프로젝트에서 (출력되는의 몰수 러너에서 호출하기 exe 인이다), 실행의 메인 스레드는 다음과 같습니다

[STAThread] 
public static int Main(string[] args) 
{ 
    Console.WriteLine("xUnit.net console test runner ({0}-bit .NET {1})", 
     IntPtr.Size * 8, Environment.Version); 
    Console.WriteLine("Copyright (C) 2007-11 Microsoft Corporation."); 

    if (args.Length == 0 || args[0] == "/?") 
    { 
     PrintUsage(); 
     return -1; 
    } 

    AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; 

    try 
    { 
     CommandLine commandLine = CommandLine.Parse(args); 

     int failCount = RunProject(commandLine.Project, 
      commandLine.TeamCity, commandLine.Silent); 

     if (commandLine.Wait) 
     { 
      Console.WriteLine(); 
      Console.Write("Press any key to continue..."); 
      Console.ReadKey(); 
      Console.WriteLine(); 
     } 

     return failCount; 
    } 
    catch (ArgumentException ex) 
    { 
     Console.WriteLine(); 
     Console.WriteLine("error: {0}", ex.Message); 
     return -1; 
    } 
    catch (BadImageFormatException ex) 
    { 
     Console.WriteLine(); 
     Console.WriteLine("{0}", ex.Message); 
     return -1; 
    } 
} 

코드, 모든 작품을 디버깅하는 동안 내 테스트를 실행 (xUnit만으로 테스트를 실행하는 데 문제가 없었기 때문에) 예상대로., 나는이 라인에서 주석

AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; 

xunit.console.exe 내장 : 나는 예외가 내 원래의 게시물에서 오류 메시지 및 스택 추적을 기반으로 발생되는 경우로 나타납니다 다음 줄을, 발견 Moles 러너를 다시 실행할 때 /runner 인수로 사용해 보았습니다. 이번에는 예외가 발생하지 않았습니다.

moles.runner.exe에서 호출했을 때이 줄에서 보안 예외가 발생하는 이유는 아직 모르겠지만 xUnit 콘솔 만 실행할 때는 그렇지 않습니다.

+0

xunit의 버전은 무엇입니까? 1.9 (또는 1.8?)는 xunit에 의해 부과 된 보안 요구 사항을 변경했습니다. codeplex 사이트를 살펴보십시오. –

+0

두 기계 모두에서 1.9를 사용하고 있습니다. 나는 Moles와 함께 주자 사용에 대한 릴리스 노트에서 아무 것도 보지 못했지만 계속 살펴볼 것입니다. 그것은 xUnit 콘솔에서만 실행할 때 테스트가 잘 실행되기 때문에 Moles와 함께 사용하는 것과 관련된 문제로 보입니다. –

+0

xUnit v1.9.0.1566을 실행하는 것과 동일한 문제가 발생합니다. gui 및 console runners 모두에 대해 오류가 표시됩니다. – AlGonzalez

답변

1

CodePlex의 최신 소스 코드에서 컴파일하는 것이 MethodAccessException없이 실행됩니다.

+0

[changset 92a156e06d8f] (http://xunit.codeplex.com/SourceControl/changeset/changes/92a156e06d8f)를 사용하여 작동시킬 수있었습니다. –