2013-03-20 25 views
7

Tôi đang cố gắng tìm ra cách viết các bài kiểm tra đơn vị cho một ứng dụng máy chủ yêu cầu các ổ cắm trong C#. Tôi cần phải đọc từ một ổ cắm để xử lý yêu cầu. Trong Java, tôi có thể tránh các ổ cắm bằng cách sử dụng các luồng, vì vậy khi viết các bài kiểm tra đơn vị tôi có thể dễ dàng chuyển đổi một chuỗi thành một luồng.Thử nghiệm đơn vị C# bằng cách sử dụng các ổ cắm

// ====== 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); 

Tôi chỉ tìm thấy NetworkStream() nhưng cũng yêu cầu ổ cắm.

Làm thế nào tôi có thể đạt được điều này trong C# để tôi có thể tạo Luồng không có ổ cắm? Và làm cách nào tôi có thể viết vào Luồng và đọc lại để xem thông báo có chính xác không?

+0

lẽ [MemoryStream] (http://msdn.microsoft.com/en-us/library/system. io.memorystream.aspx), được hỗ trợ bởi một byte []. Nếu bạn muốn viết một chuỗi và bạn được quyền "mã hóa" mã hóa, bạn có thể sử dụng một cái gì đó như [Encoding.GetBytes] (http://msdn.microsoft.com/en-us/library/ds4kkd55%28v=vs .100% 29.aspx) để chuyển đổi chuỗi thành một byte [] – nkvu

+0

nếu nó được hỗ trợ bởi byte [] làm thế nào tôi có thể sử dụng nó, để đọc từ một ổ cắm? chương trình phải có khả năng nhận luồng bất kể nó được tạo bằng chuỗi hay ổ cắm – dnanon

Trả lời

4

[nkvu - Di chuyển điều này ra khỏi các nhận xét và đưa ra câu trả lời dựa trên câu hỏi của người đăng trên phản hồi của tôi; không cố gắng để ăn cắp @ sấm sét của Andrey]

Vì vậy, trong Java bạn đang làm:

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

Trong các thử nghiệm đơn vị của bạn (Tôi giả định, dựa trên câu hỏi ban đầu của bạn).

Trong C# bạn có thể làm:

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

Điều đó sẽ được (lưu ý tôi đã không thực hiện thực thế giới Java trong một thời gian) một C# -ish tương đương. Vì MemoryStream chỉ là một lớp con của Stream, bạn có thể sử dụng các phương pháp Luồng chung để đọc dữ liệu từ nó (ví dụ: Đọc()).

Bạn cũng có thể viết thư cho một MemoryStream, ví dụ:

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

HTH, Nathan

Các vấn đề liên quan