2012-02-17 11 views
5

私は、インターフェースで偽のオブジェクトを動的に作成する必要があります。この偽のオブジェクトのすべてのメソッドとプロパティは、単にNotImplementedExceptionをスローする必要があります。 .NETのリフレクションAPIだけで簡単に行う方法はありますか?インターフェースで偽のオブジェクトを作成する

+0

モックライブラリを使用する必要があるようです。なぜあなたはNotImplementedExceptionを持つクラスを持つ必要がありますか?おそらく、モックを使用するよりも優れた解決策があります。 – Archeg

+0

私は、インターフェイスとそのインターフェイスを実装するクラスを含むアセンブリでいっぱいのフォルダを持つ1つのアセンブリを持っています。したがって、アプリケーションの起動時に、このフォルダをスキャンし、すべてのインターフェイスをCastle IoCコンテナに実装して登録しています。しかし、いくつかの実装が欠落しているので、実行時に欠落しているものがあることを私に知らせるために例外をスローする偽のクラスを生成する必要があります。本当に大きなアプリケーションなので、これらの偽のクラスを手動で作成したくありません。 –

答えて

1

城プロキシ実行時インタフェースのプロキシオブジェクトを生成するニートライブラリです。すべての主要なモッキングフレームワークでは、フードの下でCastle Proxiesも使用されます。

学習曲線はMoqのようなものを使用するよりも急ですが、Moqは単体テスト専用に設計されているため、あなたのニーズに適しています。そのため、APIは、後で。

+0

キャッスルプロキシーがうまく動作しているようです。ありがとう。 –

7

Moqなどの模擬APIを使用できます。単体テストを模倣するように設計されていますが、必要な作業を行う必要があります。

-1

唯一の解決策はReflection.Emitを使用することです。それは非常に単純ではありません:) C# Reflection: Emitting classes to existing assembliesまたはReflection Emitを参照してください。

+2

Moq(別の回答で示唆されているように)はReflection.Emitを使用しているライブラリなので簡単な解決策です! – bang

2

ImpromptuInterfaceが役に立ちます。

(そのホームページからコピーされた)サンプルコードは、次のとおり

using ImpromptuInterface; 
    using ImpromptuInterface.Dynamic; 

    public interface IMyInterface{ 

     string Prop1 { get; } 

     long Prop2 { get; } 

     Guid Prop3 { get; } 

     bool Meth1(int x); 
    } 

    //Anonymous Class 
    var anon = new { 
      Prop1 = "Test", 
      Prop2 = 42L, 
      Prop3 = Guid.NewGuid(), 
      Meth1 = Return<bool>.Arguments<int>(it => it > 5) 
    } 

    IMyInterface myInterface = anon.ActLike<IMyInterface>(); 
関連する問題