2017-10-13 5 views
0

Mon test d'unité appelle des composants qui effectuent des interactions http. Je veux configurer un serveur http avant d'exécuter le test, puis faire des assertions après le test pour voir si les interactions attendues se sont produites. La simulation est un niveau trop bas pour plusieurs raisons, notamment le fait que je souhaite exercer des interactions réseau dans le cadre du test.Quel est un moyen rapide de configurer un serveur http dans un test d'unité Java et de faire des assertions à son encontre?

Répondre

0

Utilisation du Simple Framework, que vous pouvez inclure par gradle comme ceci:

testCompile 'org.simpleframework:simple:5.+'

Vous pouvez écrire un test comme celui-ci:

public class HttpMockingTest { 

    class TestContainer implements Container { 

     int n = 0; 

     @Override 
     public void handle(Request req, Response resp) { 

      // count 
      n += 1; 

      // close the response 
      try { 
       resp.getOutputStream().close(); 
      } catch (IOException e) { 
       throw new RuntimeException(e); 
      } 
     } 
    } 

    @Test 
    public void test0() throws IOException { 

     // this sets up the server 
     TestContainer testContainer = new TestContainer(); 
     Server server = new ContainerServer(testContainer); 
     SocketConnection socketConnection = new SocketConnection(server); 
     InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost", 9999); 
     socketConnection.connect(inetSocketAddress); 

     // this invokes the server 
     int n = 2; 
     for (int i = 0; i < n; i++) { 
      try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { 
       CloseableHttpResponse httpResponse = httpClient.execute(new HttpGet("http://localhost:9999/foo")); 
      } 
     } 

     // make assertions 
     assertEquals(n, testContainer.n); 
    } 
}