2013-03-20 20 views
7

Próbuję dowiedzieć się, jak pisać testy jednostkowe dla aplikacji serwera, która wymaga gniazd w języku C#. Muszę czytać z gniazda w celu przetworzenia żądania. W Javie mogłem uniknąć gniazd przy użyciu strumieni, więc podczas pisania testów jednostkowych mogłem z łatwością przekonwertować ciąg na strumień.C# testy jednostkowe przy użyciu gniazd

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

Znalazłem tylko NetworkStream(), ale także wymaga gniazda.

Jak mogę to osiągnąć w języku C#, aby utworzyć strumienie bez gniazd? A jak mogę napisać do strumienia i przeczytać go ponownie, aby sprawdzić, czy wiadomość jest poprawna?

+0

Może [MemoryStream] (http://msdn.microsoft.com/en-us/library/system. io.memorystream.aspx), który jest wspierany przez bajt []. Jeśli chcesz napisać ciąg znaków i możesz "zakodować" kodowanie, możesz użyć czegoś takiego jak [Encoding.GetBytes] (http://msdn.microsoft.com/en-us/library/ds4kkd55%28v=vs .100% 29.aspx), aby przekonwertować ciąg na bajt [] – nkvu

+0

, jeśli jest on poparty bajtem [] w jaki sposób mogę go użyć do odczytu z gniazda? program musi mieć możliwość uzyskania strumienia niezależnie od tego, czy jest on utworzony przez ciąg lub gniazdo – dnanon

Odpowiedz

4

[nkvu - Przeniesienie tego z komentarzy i na odpowiedź opartą na pytaniu z plakatu na mój komentarz; nie próbuje ukraść @ piorunów Andrey za]

Więc w Javie robisz:

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

W twoich testów jednostkowych (jestem zakładając, oparty na oryginalnym pytanie).

W języku C# można zrobić:

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

To byłoby (zauważając, że nie zrobili rzeczywistym świecie Java na chwilę) C# równoważne -ish. Ponieważ MemoryStream jest tylko podklasą Stream, możesz użyć ogólnych metod Stream do odczytania z niego danych (np. Read()).

Można również napisać do MemoryStream, np:

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

HTH, Nathan

Powiązane problemy