7

C# でソケットを要求するサーバー アプリケーションの単体テストを作成する方法を見つけようとしています。リクエストを処理するには、ソケットから読み取る必要があります。Java では、Streams を使用してソケットを回避できたので、単体テストを作成するときに文字列をストリームに簡単に変換できました。

// ====== Input ======
InputStream socketInputStream = new InputStream(socket.getInputStream()); 
// or using string instead like this
InputStream socketInputStream = new ByteArrayInputStream("string".getBytes());

BufferedReader in = new BufferedReader(new InputStreamReader(socketInputStream));

// ====== Output ======
OutputStream socketOutputStream = new OutputStream(socket.getOutputStream());
// I need to write byte[] to the stream
BufferedOutputStream out = new BufferedOutputStream(socketOutputStream);

NetworkStream() しか見つかりませんでしたが、ソケットも必要です。

ソケットなしでストリームを作成できるように、C# でこれを達成するにはどうすればよいですか? また、ストリームに書き込んで再度読み込んで、メッセージが正しいかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

4

[nkvu - 私のコメントに対する投稿者の質問に基づいて、これをコメントから回答に移動します。@Andreyの雷を盗もうとしない]

したがって、Javaでは次のことを行っています:

InputStream socketInputStream = new ByteArrayInputStream("string".getBytes());

あなたの単体テストで(あなたの元の質問に基づいて、私は仮定しています)。

C# では、次のことができます。

Stream socketInputStream = new MemoryStream(Encoding.UTF8.GetBytes("string")); 

それは(私がしばらくの間実世界のJavaを行っていないことに注意してください)C#っぽい同等のものです。MemoryStream はStreamの単なるサブクラスであるため、一般的な Stream メソッドを使用して、そこからデータを読み取ることができます (例: Read())。

次のように、MemoryStream に書き込むこともできます。

bytes[] toWrite = Encoding.UTF8.GetBytes("Write to stream");
Stream writeToStream = new MemoryStream();
writeToStream.Write(toWrite, 0, toWrite.Length);

HTH、ネイサン

于 2013-03-20T21:28:44.733 に答える
3

C# でMemoryStreamを使用できます。

于 2013-03-20T21:10:33.563 に答える