MOLES 및 XUNIT.NET을 사용하여 단위 테스트를 실행하는 처리되지 않은 메서드 AccessException

StackOverflow https://stackoverflow.com//questions/9690415

문제

XUnit.net 테스트 프레임 워크, MOQ 및 정적 메소드의 스텁을 생성하기위한 MOQ 격리 프레임 워크를 사용하는 Visual Studio 2010 (.NET 4)의 단위 테스트 프로젝트가 있습니다. 64 비트 컴퓨터에서 XUnit 버전 1.9를 사용하고 있습니다.

명령 줄에서 테스트를 실행하려면 다음 명령을 사용하고 있습니다.

moles.runner.exe.exe project.tests.dll /runner : xunit.console.clr4.exe

그러나 나는 매번 다음과 같은 예외를 얻는다 :

계측기 ... Xunit.net 콘솔 테스트 러너 시작 (64 비트 .NET 4.0.30319.1) 저작권 (C) 2007-11 Microsoft Corporation.

처리되지 않은 예외 : System.MethodAccessException : 보안 시도 투명한 방법 'xunit.consoleclient.program.main (system.string [])' 보안 중요 방법에 액세스하려면 'system.appdomain.add_unhandledexception (system.unhandledexceptioneEventHandler)' 실패한. xunit.consoleclient.program.main (string [] args)에서 microsoft.moles.runner.molesrunner.runnerrunner.run (문자열 러너, 문자열 [] args) AT. microsoft.moles.runner.molesrunner.runnerrunner.run (문자열 러너, 문자열 [] args) AT. microsoft.moles.runner.molesrunner.launchrunnerEntryPoint (Molesrunneroptions. 옵션) microsoft.moles.runner.molesrunner.runnermain (String [] args) microsoft.moles.runner.program.main (String [] args)

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

포럼 게시물에서 찾았습니다.

.NET 4 프레임 워크에서 보안 TRANPARINGLE 규칙은 보안 투명한 코드는 보안 중요 코드로 호출하는 것입니다.

이 오류의 원인을 확인하려면 무엇을 확인할 수 있습니까? 이를 방지하기 위해 변경 해야하는 보안 설정이 있습니까?

참고 : 32 비트 워크 스테이션에서 동일한 정확한 문제가 있습니다.

update : http에서 코드를 다운로드하기로 결정했습니다. //xunit.codeplex.com/sourcecontrol/changeset/changes/600246119DCA 및 디버그. xunit.console 프로젝트 (Moles 러너에서 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 콘솔을 자체로 실행할 때는 그렇지 않습니다.

도움이 되었습니까?

해결책

메소드 accessException없이 코드 인쇄에서 최신 소스 코드에서 컴파일합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top