2011-10-10 11 views
5

私は現在、Visual Studioで書かれた標準的な単体テストを実行する単体テストフレームワークを作成しています。フレームワークは現在、アクセサーと正しく動作していません。次のテスト方法を検討してください。クラスアクセサのインスタンスを作成する

[TestMethod()] 
public void TestMethod() 
{ 
     ExampleMethods_Accessor target = null; 
     target = new ExampleMethods_Accessor(); 
     target.SomeMethod(); 
} 

この例では、アクセサはVisual Studioによって生成されています。 Visual StudioのUnit Testing環境を使用して実行すると、単体テストは正常に動作します。しかし、私は私のフレームワーク内からTestMethod()を呼び出すことを望みます。 "target = new ExampleMethods_Accessor()"行で、次の例外がスローされます。

"Proband.ExampleMethods_Accessor"の型初期化子が例外を送出しました。

内部例外:

は、ファイルまたはアセンブリをロードできませんでした:発端者、バージョン= 1.0.0.0、文化=中立、なPublicKeyToken = nullを...

はどのようにマイクロソフトユニットテストのいずれかのアイデアを持っていますフレームワークは単体テストを呼び出しますか?私はそれが不足しているTestContextオブジェクトのためかもしれないと思っていた。私の場合、これは "null"です。 Visual Studioで単体テストを開始するとき、TestContextオブジェクトには多くの情報が含まれています。私はそれを正しく初期化する必要がありますか?どのように初期化する必要がありますか?すべての助けを

おかげで、 クリスチャン

編集:私はアクセサが作業している方法を試して保管

。私はProband_Accessor.dllにどのようなコードが生成されているかを見るためにILSpyを使用しました。これは、例外を引き起こした命令があることが判明:

[TestMethod()] 
    [DeploymentItem("Proband.dll")] 
    public void SomeMethodTest() 
    { 
     ExampleMethods_Accessor target = null; 
     ExampleMethods c = null; 

     try 
     { 
      Assembly.Load("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); // this works fine 
      PrivateType tx = new PrivateType(typeof(ExampleMethods)); // this works fine as well (also without loading the assembly) 

      PrivateType t = new PrivateType("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Proband.ExampleMethods"); // this causes the exception 

      c = new ExampleMethods(); // this works fine 
      target = new ExampleMethods_Accessor(); // this causes the exception as well 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(); 
     } 
     int actual; 
     actual = target.SomeMethod(); 
    } 

私は絶対になぜ「新しい、理解していない:私は(単なるテスト用)、このようなことに私のユニットテストコードを修正

SomeClass_Accessor.m_privateType = new PrivateType("Probant, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Probant.SomeClass"); 

私のAppDomainにPrivateType(「発端者、バージョンが....」は動作しません。誰も考えていますか?

+0

それが利用できるようにする* 'Proband'アセンブリ、およびどのように*試してみました何ですか? –

+0

あなたは何を書いているのですか? [TestMethod]を使用して、MSTestフレームワークを使用しているようです。何らかのカスタムテスト_runner_を書いていますか? –

+0

ああ、説明しないと申し訳ありません。発案されたアセンブリは、テストすべきコードを含むものです。 ExampleMethodsは、個人的なメソッド( "SomeMethod")を含む発案者アセンブリ内のクラスです。 – Christian

答えて

1

私は問題の回避策を作成するために管理している。

、私はAssemblyResolvを追加していますeEventHandler:

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler); 

このイベントハンドラは、次のコードが含まれています

private Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) 
    { 
     if(args.Name == "Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 
     { 
      // resolving correct assembly of type under test 
      return typeof(ExampleMethods).Assembly; 
     } 
     else 
     { 
      return null; 
     } 
    } 

は今のコードの行 "ターゲット=新ExampleMethods_Accessorは();" 正常に動作し、適切なアクセサオブジェクトを返します。

私はまだ理解していない、なぜアセンブリが自動的に解決できないのですか?誰もが同じ問題を抱えているということは非常に低い場合でも

:私はこの答えは誰かに役立ちます願っています:)

0

私はほぼ同じくらい複雑な何もしていないのですが、私が持っていた:

  1. ウェブ.NET 3を使用したアプリケーションプロジェクト。アクセサを使用してユニットテストを実行しようとしたとき、私は同じBadImageFormat例外を得ていた.NET 3.5

を使用して、.NET 3.5

  • テストプロジェクトを使用して5
  • 設定プロジェクト。第二の仕事は、周りに私の問題を解決し

    http://connect.microsoft.com/VisualStudio/feedback/details/677203/even-after-installing-vs2010-sp1-unit-tests-targeting-3-5-framework-fail-if-they-are-using-private-accessor#details

    は、私は次のリンクを発見しました。私は、.NET 4.0をターゲットにしたテストプロジェクトを変更しました。

  • +0

    ありがとう、私は.NET 4.0のテストアセンブリでこれを試してみます。 – Christian

    0

    私はちょうどこの正確な問題を抱えていました。これは、テストメソッドからDeploymentItem属性を削除したためです。私はもう一度それを追加した、私はもはやビルドマシン上でエラーが発生しました。

    [TestMethod] 
    [DeploymentItem("FedImportServer.dll")] // ** This is necessary for the build machine. ** 
    public void SourceFileStillExistsAfterProcessingFails() 
    

    注:ローカルで実行してもエラーは発生しません。

    これはエラーです:

    Test method FedImportTests.FedImportServiceHostTest.FileNoLongerExistsAfterSucessfulProcessing threw exception: System.TypeInitializationException: The type initializer for 'FedImportServer.Processing.FileProcessor_Accessor' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'FedImportServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

    関連する問題