2013-03-20 5 views
7

C#에서 소켓을 다시 시작하는 서버 응용 프로그램에 대한 단위 테스트를 작성하는 방법을 알아 내려고합니다. 요청을 처리하려면 소켓에서 읽어야합니다. Java에서 스트림을 사용하여 소켓을 피할 수 있으므로 단위 테스트를 작성할 때 문자열을 스트림으로 쉽게 변환 할 수 있습니다.소켓을 사용하는 단위 테스트 #

// ====== 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#에서 어떻게 얻을 수 있습니까? 그리고 스트림에 쓰고 다시 읽으면 메시지가 올바른지 확인할 수 있습니까?

+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

+0

바이트가 []으로 뒷받침되는 경우 어떻게 소켓에서 읽을 수 있습니까? 프로그램은 문자열이나 소켓에 의해 생성 된 것이 든 관계없이 스트림을 얻을 수 있어야합니다. – dnanon

답변

4

[nkvu - 내 의견에 대한 포스터의 질문에 따라 의견과 대답으로 이동; 단위 테스트에서

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

(I 원래의 질문에 따라, 가정입니다) :

그래서 자바에서 당신이하고있는] 안드레이의 천둥 @ 훔치려 고하지.

C#에서 당신이 할 수 있습니다 : -ish 해당하는 C#을 (나는 잠시 동안 실제 자바를하지 않은 지적) 될

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, 나단

관련 문제