簡體   English   中英

c#使用套接字進行單元測試

[英]c# unit tests using sockets

我正在試圖找出如何為服務器應用程序編寫單元測試,該服務器應用程序需要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#中實現這一點,所以我可以創建沒有套接字的Streams? 如何寫入流並再次讀取它以查看消息是否正確?

[nkvu - 根據海報的問題反對我的評論,將其從評論中移出並回答答案; 不想偷竊@ Andrey的雷聲]

所以在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,Nathan

您可以在C#中使用MemoryStream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM