2017-04-16 40 views
-1

我有一个服务器客户端,它使用发送消息的PrintWriter和传入消息的BufferedReader从服务器套接字发送和接收信息。我试图通过BufferedReader向客户端发送字符串并从PrintWriter读取返回的输出来在JUnit中测试没有服务器连接的客户端。从PrintWriter和BufferedReader发送和读取字符串

class Client{ 

    private BufferedReader incomingMessage; 
    private PrintWriter outgoingMessage; 
    private StringWriter output; 

    //Constructor for testing without server connection 
    public Client(){ 
     output = new StringWriter(); 
     outgoingMessage = new PrintWriter(output); 
     incomingMessage = new BufferedReader(new InputStreamReader(System.in)); 

    } 

    //Methods for processing incoming messages and sending responses are 
    //omitted 
    //responses are sent using outgoingMessage.println("msg"); 


    public void sendStringToInputStream(String msg){ 
     incomingMessage = new BufferedReader(new StringReader(msg)); 
    } 

    public String getOutputAsString(){ 
     return output.toString(); 
    } 
} 

这是我正在运行的测试。

public class ServerMessageTest { 

    private Client testClient; 
    private String output; 

    @Before 
    public void setUp(){ 
     testClient = new Client(); 

    } 

    @Test 
    public void testClientOutputMessage(){ 
     testClient.sendStringToInputStream("GAME A OVER SEND OUTCOME"); 
     output = testClient.getOutputAsString(); 
     String testString = "GAME A OVER PLAYER 1 0 PLAYER 2 0"; 
     Assert.assertEquals(testString, output.toString()); 
    } 
} 

测试失败显示此:

org.junit.ComparisonFailure: 
Expected :GAME A OVER PLAYER 1 0 PLAYER 2 0 
Actual : 

所以这是与读取输出消息或设置输入消息的问题。我对IO的东西有点新,所以如果有人能指出我做错了什么,我会非常感激!

回答

1
  1. 您的变量名称很奇怪。 A BufferedReader不是消息,也不是PrintWriter
  2. 你没有在这个代码中做任何输出或输入。您需要拨打println()发送消息,并拨打readLine()以接收该消息。将读写器转换为字符串完全没有任何作用。
  3. 您需要创建您的读写器一次套接字,不是每个消息一次。
+0

这实际上不是我的代码。我的部分任务是扩展和测试同学代码的功能。我试图理解他们在这里做什么,但我不能。实际代码中有方法通过BufferedReader和PrintWriter打印和读取行。我不能发布这些,因为我们不被允许。我只需要弄清楚如何从PrintWriter捕获输出流,并通过BufferedReader强制输入而不连接到套接字。我知道他们是输入/输出流。只需要帮助访问它们。 –

+0

它的代码甚至没有什么相关性。你发布的代码有我提到的缺陷。如果这不是真正的代码或所有相关代码,或者您询问的实际问题并未完全包含在您的问题中,那么这是完全浪费时间。 – EJP