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?
0
A
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);
}
}