2015-12-05 43 views
0

我需要使用JUnit测试一些客户端/服务器应用程序,并且在测试客户端与服务器的连接时遇到问题。看起来,测试挂在服务器类中的“Socket clientSocket = serverSocket.accept()”行,并且它不让我连接一个新的客户端。JUnit测试挂在clientSocket.accept()?

下面是JUnit类:

@Test 
     public void testNetServerComm_1() throws Exception { 
      server = new NetServerComm(); 
      assertNotNull(server); 
     } 

     @Test 
     public void testAddMessageToQueue_1() throws Exception { 
      NetServerComm fixture = new NetServerComm(); 
      NetServerSideMessage msg = new NetServerSideMessage(birdsong.comm.ServerSideMessage.Type.BIRDSONG_MESSAGE, "", 
        ""); 
      fixture.addMessageToQueue(msg); 
      assertEquals(1, fixture.getMsgQueueSize()); 
     } 

    @Test 
     public void testClientIsConnected_1() throws Exception { 
      NetServerComm fixture = new NetServerComm(); 
      fixture.start(); 

      //test doesn't go further that this.. 

      String nickname = "john"; 
      new NetClientComm().connect("127.0.0.1", nickname); 
      boolean result = fixture.isClientConnected(nickname); 
      assertTrue(result); 
     } 

客户端类:

//connects to the server 
@Override 
    public void connect(String host, String nickname) { 
     try { 
      clientNickname = nickname; 
      System.out.println("Address= " + host + " and NickName = " + nickname); 
      socket = new Socket(host, NetServerComm.PORTO); //8080 
      System.out.println("Socket = " + socket); 
      serverMsg = new NetServerSideMessage(ServerSideMessage.Type.CLIENT_CONNECTED, null, clientNickname); 
      out = new ObjectOutputStream(socket.getOutputStream()); 
      out.writeObject(serverMsg); 
      isConnected = true; 
      messageHandler = new Thread(new MessageHandler(socket)); 
      messageHandler.start(); 
     } catch (IOException e) { 
      System.out.println("Failed connecting to the server."); 
      e.printStackTrace(); 
     } 
    } 

服务器类:

//starts the server 
@Override 
    public void start() { 
     try { 
      serverSocket = new ServerSocket(PORTO); //8080 
      System.out.println("Servidor is online: " + serverSocket); 
      try { 
       while (true) { 
        Socket clientSocket = serverSocket.accept(); 

        //test hangs at the method above^^^ 

        checkNewClient(clientSocket); 
        if (nameCheck == true) 
         new Thread(new ClientHandler(clientSocket)).start(); 
       } 
      } finally { 
       System.out.println("Closing the server.."); 
       serverSocket.close(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
+2

它看起来像你开始()是越来越被同一线程的测试块有(在接受()部分执行的方法,所以)。你可以试着让这个方法由一个新的Thread来执行吗? – Berger

+0

这似乎已经完成了这项工作:) – JDev

回答

1

看起来你开始()是越来越由同一可执行的方法线程作为测试,所以它在那里阻塞(在accept()部分)。你可以试着让这个方法由一个新的Thread来执行吗? - 贝格

这似乎已经完成了工作:) - 的jdev