2011-09-12 4 views
0

Socketで初期化されるクラスを作成しています。 NUnit DynamicMockを使ってテストを書いてみたい。NUnit DynamicMockを使用して非インターフェイスおよび非MarshalByRefをモックする方法

Socketのモックを作成するにはどうすればよいですか?

DynamicMock DynamicSocketMock = new DynamicMock(typeof (Socket)); 
/*No ERROR - BUT I THINK HERE IS THE PROBLEM*/ 

Socket SocketMock = (Socket) DynamicSocketMock.MockInstance; 
/*RUNTIME ERROR*/ 

ToBeTested Actual = new ToBeTested(SocketMock); 
/*NEVER REACHED*/ 

編集#1

私はそれはしかし、私はまだテストすることはできませんかなり良さそうに見えますMOQ NADに見えました。私の最初の問題は、使用するrigthのバージョンを見つけることでしたが、私はこれを解決したと思います。

var Mock = new Mock<Socket>(); 
Socket MockSocket = (Socket)Mock.Object; 
ToBeTested Actual = new ToBeTested(SocketMock); 

Socketにはパラメータのないコンストラクタがありません。今私はそれにパラメータを与えたくない、私はすべてを模擬したい。

編集#2 これは問題であると思われます。lot of peopleターゲットはソケットから直接モックを作成することです。

答えて

2

私はSocketを嘲笑するのは非常に進んだ仕事だと思います.NUnit DynamicMockは、実際の強力なモッキングソリューションであるとふりをしていません。

私は個人的にMoqを使用しています.Socketクラスは封印されていないので、Moqを使って模倣するのはかなり簡単でニーズに合っているはずです。

NUnitのDynamicMockは非常によく文書化され、それが表示され、インターネットに代表されるが、私は何で動作するように想定されていないよう

http://nunit.sourcearchive.com/documentation/2.5.10.11092plus-pdfsg-1/DynamicMock_8cs_source.html#l00014

に見えるそのコンストラクタからコードにここで見ていたされていませんインターフェイスを除いて、実際のモックフレームワークを調べる必要があります。

0

私は私の問題を解決しました。

答えはDynamicMockだけです(インターフェイスあり)。

ちょうど私が簡単に多くの時間をそれをしたいので、prosperparametersか、との部品番号 - ここでは、私がやったことです:

public class Test_MockSocket : Socket 
{ 
    public Test_MockSocket() : base (
        (new IPEndPoint(IPAddress.Parse("127.0.0.1"), 30000)).AddressFamily, 
        (SocketType.Stream), 
        (ProtocolType.Tcp)) 
    { 
    } 
} 

とテストのセットアップ:

 var Mock = new Mock<Test_MockSocket>(); 
     Socket MockSocket = (Socket)Mock.Object; 
     ToBeTested Actual = new ToBeTested (MockSocket); 

私はできませんあなたはこれより少ない労力でそれを得ることができると思います。

+0

これは、次に何をしたいかによって異なります。 Moqのような実際のモッキングソリューションでは、特定の呼び出しで特定の値を返すようにモックを設定することができます。しかし、あなたが必要とするのは、オブジェクトをコンストラクタに渡し、それを使って面白いことをしないのであれば、ここのような手動で継承されたモッククラスをいつでも行うことができます。 –

関連する問題