日食:JerseyTest.getClient returns RestEasyClient

Eclipse: JerseyTest.getClient returns RestEasyClient

我得到了一个包含 jersey-clientresteasyclient 库的项目。这是有历史原因的,因为我必须在执行目标方法。 当我手动排除 resteasyclient.jar 时,它起作用了。

有没有办法在 eclipse 中测试时排除库?

是的,这太疯狂了。这就是 JAX-RS ClientBuilder 的设计方式1;类路径上的其他 ClientBuilder 优先于 Jersey ClientBuilder。只有当您使用标准 JAX-RS ClientBuilder 时才会出现这种情况,这就是 JerseyTest 所做的。

但是每个实现都有自己的 ClientBuilder 实现。例如,Jersey 带有 JerseyClientBuilder。如果你想使用它,那么你可以。

Client client = JerseyClientBuilder.createClient();
if (client instance JerseyClient) {
   System.out.println("Hip hip hooray!");
}

使用 JerseyTest 时,您可以覆盖使用的默认客户端。

@Override
public Client getClient() {
    return JerseyClientBuilder.createClient();
}

有几点需要注意:

  1. 如果您在 JerseyTest 中覆盖 configureClient,它将不起作用。您只需要在 getClient() 方法中配置客户端。

  2. 可能最重要的是它不能与内存测试提供程序一起使用。使用内存中测试提供程序时,客户端配置了一个特殊的内存中连接器。如果您想覆盖客户端,那么您应该使用 "real server" 测试提供程序,例如 grizzly2。


1 - 如果您想了解血淋淋的细节,请查看它使用的 ClientBuilder and the FactoryFinder 的来源。