java - 如何模拟 sun jersey 客户邮寄电话?

标签 java unit-testing junit mockito jersey-client

这是我的代码

@Service
public class PaymentHandler {
private static final Gson GSON = new Gson();

private static Client webServiceClient = createSslClient(); // function creates a ssl connection

public Response makePayment(String payload) {
    WebResource webResource = webServiceClient.resource(url);

    WebResource.Builder builder = webResource.getRequestBuilder();

    String r = builder
            .type(MediaType.APPLICATION_JSON_TYPE)
            .accept(MediaType.APPLICATION_JSON_TYPE)
            .post(String.class, payload);

    Response response = GSON.fromJson(r, Response.class);
}
}

这是我尝试测试它的方法,但它不起作用,它总是调用支付服务。我无法 mock 它。

Client client = mock(Client.class );
WebResource webResource = mock(WebResource.class);
WebResource.Builder builder = mock(WebResource.Builder.class);
ClientResponse clientResponse = mock(ClientResponse.class);
when(client.resource(anyString())).thenReturn(webResource);
when(webResource.getRequestBuilder()).thenReturn(builder);

when(builder.type(anyString())).thenReturn(builder);
when(builder.accept(anyString())).thenReturn(builder);
when(builder.post(Matchers.eq(String.class), anyString())).thenReturn("Test");
paymentHandler.makePayment(payload); //assume that I send actual payload

有人可以告诉我如何模拟这个吗?

最佳答案

下面是我如何模拟它

@Mock
Client client;

@Mock
WebResource webResource;

@Mock
WebResource.Builder builder;


@Test
public void test() {
ReflectionTestUtils.setField(payeezyHandler,"webServiceClient",client);
Mockito.when(client.resource(anyString())).thenReturn(webResource);
Mockito.when(webResource.getRequestBuilder()).thenReturn(builder);

Mockito.when(builder.type(MediaType.APPLICATION_JSON_TYPE)).thenReturn(builder);
Mockito.when(builder.accept(MediaType.APPLICATION_JSON_TYPE)).thenReturn(builder);
Mockito.when(builder.post(Matchers.eq(String.class),anyString())).thenReturn(fakeResponse());
}

我知道 ReflectionTestUtils 不好用。但是,如果您的测试类只有一个公共(public)函数要测试,那么我想没有什么坏处。

关于java - 如何模拟 sun jersey 客户邮寄电话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54614231/

相关文章:

angularjs - 如何模拟单元测试的配置阶段提供程序?

c# - 任何使用 EF 或 Linq 的单点单元测试方法?

java - JUnit 会并行运行测试吗?

android - Android JUnit 测试中的运行时异常

c# - 如何使用 Autofixture 中的 RandomRangedNumberCustomization 来确保参数在一定范围内?

java - 测试Apache Camel Junit的所有进程和路由

java - 如何在 java 中将 [10] 替换为 {ref10}

java - 有没有办法判断 HTML 十六进制颜色是浅色还是深色

java - 在类中使用@Inject注解时出错

java - 如何在 Java 中获取列表列表的长度?