日食:JerseyTest.getClient returns RestEasyClient
Eclipse: JerseyTest.getClient returns RestEasyClient
我得到了一个包含 jersey-client
和 resteasyclient
库的项目。这是有历史原因的,因为我必须在执行目标方法。
当我手动排除 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();
}
有几点需要注意:
如果您在 JerseyTest
中覆盖 configureClient
,它将不起作用。您只需要在 getClient()
方法中配置客户端。
可能最重要的是它不能与内存测试提供程序一起使用。使用内存中测试提供程序时,客户端配置了一个特殊的内存中连接器。如果您想覆盖客户端,那么您应该使用 "real server" 测试提供程序,例如 grizzly2。
1 - 如果您想了解血淋淋的细节,请查看它使用的 ClientBuilder and the FactoryFinder 的来源。
我得到了一个包含 jersey-client
和 resteasyclient
库的项目。这是有历史原因的,因为我必须在执行目标方法。
当我手动排除 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();
}
有几点需要注意:
如果您在
JerseyTest
中覆盖configureClient
,它将不起作用。您只需要在getClient()
方法中配置客户端。可能最重要的是它不能与内存测试提供程序一起使用。使用内存中测试提供程序时,客户端配置了一个特殊的内存中连接器。如果您想覆盖客户端,那么您应该使用 "real server" 测试提供程序,例如 grizzly2。
1 - 如果您想了解血淋淋的细节,请查看它使用的 ClientBuilder and the FactoryFinder 的来源。