2013-03-20 90 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? 我如何寫入一個Stream並再次閱讀它,以查看該消息是否正確?

+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)將字符串轉換爲一個字節[] – nkvu 2013-03-20 21:13:39

+0

如果它是由byte []支持的我如何使用它,從套接字讀取?該程序必須能夠獲取流,無論它是由字符串還是套接字創建 – dnanon 2013-03-20 21:22:51

回答

4

[nkvu - 根據評論中提出的問題,根據發佈者的問題移出評論;不是試圖竊取@安德烈的風頭]

所以在Java中,你正在做的:

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

在你的單元測試(我假設的基礎上,你原來的問題)。

在C#中,你可以這樣做:

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

這將是(注意我沒有做過真實世界的Java一會兒)一個C#-ish等同。因爲MemoryStream只是Stream的子類,所以您可以使用常規Stream方法從中讀取數據(例如Read())。

你也可以寫一個MemoryStream,如:

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

HTH,彌敦道