使用WireMock和AsyncRestTemplate,如何测试失败?

时间:2018-01-14 23:51:10

标签: java spring spring-boot junit wiremock

我有一个使用(node:1236) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client Error: listen EADDRINUSE 0.0.0.0:9000 at Object.exports._errnoException (util.js:1020:11) at exports._exceptionWithHostPort (util.js:1043:20) at Server._listen2 (net.js:1262:14) at listen (net.js:1298:10) at net.js:1408:9 at _combinedTickCallback (internal/process/next_tick.js:83:11) at process._tickCallback (internal/process/next_tick.js:104:9) 来调用RestController服务的http端点的客户端类。

当我使用WireMock进行测试时,它从不调用AsyncRestTemplate方法。

当我没有为其余模板定义自己的错误处理程序时,它会永远挂起。 (它似乎挂在onFailure

如果我定义自己的错误处理程序并从okhttp3.internal.NamedRunnable.run方法返回(并且不传递给super的方法),那么它会从handleError()调用我的'onSuccess'方法。

如何调用ListenableFuture

onFailure

1 个答案:

答案 0 :(得分:0)

假设您指定了WireMock rule

线索使用看起来是正确的。

使用以下代码onFailure工作。由于调用异步,您需要一些超时或CountDownLatch或其他同步器,以确保您的测试将运行,除非您的客户端获得结果或失败:

ListenableFuture<String> response  = restTemplate.execute(url, HttpMethod.GET, new AsyncRequestCallback() {
    @Override
    public void doWithRequest(AsyncClientHttpRequest request) throws IOException {

    }
}, new ResponseExtractor<String>() {
    @Override
    public String extractData(ClientHttpResponse response) throws IOException {
        return new Scanner(response.getBody()).useDelimiter("\\A").next() ;
    }
});


response.addCallback(new ListenableFutureCallback<String>() {
    @Override
    public void onFailure(Throwable ex) {
        ex.printStackTrace();
    }

    @Override
    public void onSuccess(String result) {
        System.out.println(result);
    }
});

TimeUnit.SECONDS.sleep(2);