2013-03-20 17 views
7

私はC#でソケットを必要とするサーバアプリケーションのユニットテストを書く方法を理解しようとしています。私は要求を処理するためにソケットから読み込む必要があります。 Javaでは、ストリームを使用してソケットを避けることができます。ユニットテストを書くときに、文字列をストリームに簡単に変換できます。ソケットを使ったCユニットテスト

// ====== 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#でどうすればソケットなしでStreamsを作成できますか? そして、ストリームに書き込んでもう一度読むと、メッセージが正しいかどうか確認できますか?

+0

おそらく[のMemoryStream](http://msdn.microsoft.com/en-us/library/system。 io.memorystream.aspx)は、byte []に​​よってサポートされています。文字列を書きたい場合、エンコーディングを "ハードコード"しても問題ありません。[Encoding.GetBytes](http://msdn.microsoft.com/en-us/library/ds4kkd55%28v=vs)のようなものを使用できます。 .100%29.aspx)文字列をbyte []に​​変換する – nkvu

+0

byte []でサポートされている場合はどうすればそれを使ってソケットから読み込むことができますか?プログラムはストリングまたはソケットによって作成されたものであれ、ストリームを取得することができなければなりません – dnanon

答えて

4

[nkvu - これをコメントから外して、私のコメントに対する投稿者の質問に基づいて回答してください。あなたのユニットテストで

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

(私はあなたの元の質問に基づいて、想定しています):

だから、Javaで、あなたがやっている]アンドレイの雷@盗むしようとしていません。

C#では、あなたが行うことができます:-ish同等のC#を(私はしばらくの間、現実世界のJavaを行っていない注意する)ことになる

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

。 MemoryStreamは Streamのサブクラスであるため、一般的なStreamメソッドを使用してデータを読み込むことができます(例:Read())。

また例えば、MemoryStreamをに書くことができます:

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

HTH、ネイサン

関連する問題