5
Asynをユニットテストすることは可能ですか?ソケットプログラミング(C#を使用して)?サンプル単体テストコードを提供する。C#Asyn。ソケットプログラミング
Asynをユニットテストすることは可能ですか?ソケットプログラミング(C#を使用して)?サンプル単体テストコードを提供する。C#Asyn。ソケットプログラミング
私はあなたの.NETストリームを使用し、独自のいくつかのクラスをテストしていると仮定。 MessageSender
としましょう。 .NETストリーム自体を単体テストする理由はないことに注意してください。これはMicrosoftの仕事です。独自の.NETフレームワークコードを単体テストするべきではありません。
まずが使用するストリームを注入してください。クラス内には作成せず、プロパティ値またはコンストラクターの引数として受け入れます。たとえば、次のように
public sealed class MessageSender
{
private readonly Stream stream;
public MessageSender(Stream stream)
{
if (stream == null)
throw new ArgumentNullException("stream");
this.stream = stream;
}
public IAsyncResult BeginSendHello(AsyncCallback callback, object state)
{
byte[] message = new byte[] {0x01, 0x02, 0x03};
return this.stream.BeginWrite(
message, 0, message.Length, callback, state);
}
public void EndSendHello(IAsyncResult asyncResult)
{
this.stream.EndWrite(asyncResult);
}
}
今の例のテスト:あなたはBeginSendHello
はストリーム上BeginWrite
を呼び出し、正しいバイトを送信することをテストすることができます。ストリームを模擬し、これを確認するための期待を設定します。この例ではRhinoMocksフレームワークを使用しています。
[Test]
public void BeginSendHelloInvokesBeginWriteWithCorrectBytes()
{
var mocks = new MockRepository();
var stream = mocks.StrictMock<Stream>();
Expect.Call(stream.BeginWrite(
new byte[] {0x01, 0x02, 0x03}, 0, 3, null, null));
mocks.ReplayAll();
var messageSender = new MessageSender(stream);
messageSender.BeginSendHello(null, null);
mocks.VerifyAll();
}