2012-03-13 17 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:セキュリティクリティカル方法 「System.AppDomain.add_UnhandledException(System.UnhandledExceptionEventHandlerにアクセスするためのセキュリティ 透明メソッド 'Xunit.ConsoleClient.Program.Main(可能System.String [])' による試み) ' が失敗しました。 Xunit.ConsoleClient.Program.Main(String [] args)にある Microsoft.Moles.Runner.MolesRunner.RunnerRunner.Run(文字列ランナー、 String [] args) でMicrosoft.Moles.Runner.MolesRunner.RunnerRunner.Run (文字列ランナー、 のString []引数)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コンソールを使用すると失敗します。私はフォーラムの投稿でこれを見つけた

:.NETフレームワーク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によって課せられたセキュリティ要件を変更しました。コードプレックスのサイトを見てください。 –

+0

私は両方のマシンで1.9を使用しています。私はMolesでランナーを使用するためのリリースノートで何も見ていないが、私は見続けるだろう。 xUnitコンソールだけでテストを実行すると、Molesで使用するのに問題があるようです。 –

+0

xUnit v1.9.0.1566を実行している同じ問題が発生しています。 guiとコンソールランナーの両方にエラーが表示されます。 – AlGonzalez

答えて

1

CodePlexの最新のソースコードからのコンパイルは、MethodAccessExceptionなしで実行されます。

+0

私は[changset 92a156e06d8f](http://xunit.codeplex.com/SourceControl/changeset/changes/92a156e06d8f)を使って動作させることができました。 –

関連する問題