为什么 mockito 认为我的服务被调用了两次?
Why does mockito think my service is being called twice?
我在使用 mockito 验证模拟方法的调用次数时遇到问题。
这是我的测试
@Mock
private SquareClient squareClient;
@Mock
private PaymentsApi paymentsApi;
@Test
public void testBlah() throws Exception {
...
when(squareClient.getPaymentsApi().getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);
sut.process(EXAMPLE_PAYLOAD);
verify(squareClient).getPaymentsApi().getPayment("p1"); //<--------------error here
}
这是我的设置方法
@Before
public void setup() {
...
when(squareClient.getPaymentsApi()).thenReturn(paymentsApi);
...
}
错误
Wanted 1 time:
at com.squareup.square.SquareClient.getPaymentsApi(SquareClient.java:239)
But was 2 times:
好像还可以,但是当你看到两个电话是从哪里来的。 . 一个在服役,
Payment payment = squareClient.getPaymentsApi().getPayment(paymentId).getPayment();
和测试中的一个。为什么这个在这里?
when(squareClient.getPaymentsApi().getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);
我的问题
首先,应该只有1个调用。
其次,当我检查 2 次时 verify(squareClient, times(2)).getPayment("p1")
我得到一个 空指针 因为 getPaymentsApi() 现在是空的。这是因为模拟 when() 没有第二次应用吗?
直接在 PaymentsApi 对象上应用 @Test 中的 when() 语句。
when(paymentsApi.getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);
使用 "when()" 时不能链接方法调用。
我在使用 mockito 验证模拟方法的调用次数时遇到问题。
这是我的测试
@Mock
private SquareClient squareClient;
@Mock
private PaymentsApi paymentsApi;
@Test
public void testBlah() throws Exception {
...
when(squareClient.getPaymentsApi().getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);
sut.process(EXAMPLE_PAYLOAD);
verify(squareClient).getPaymentsApi().getPayment("p1"); //<--------------error here
}
这是我的设置方法
@Before
public void setup() {
...
when(squareClient.getPaymentsApi()).thenReturn(paymentsApi);
...
}
错误
Wanted 1 time: at com.squareup.square.SquareClient.getPaymentsApi(SquareClient.java:239) But was 2 times:
好像还可以,但是当你看到两个电话是从哪里来的。 . 一个在服役,
Payment payment = squareClient.getPaymentsApi().getPayment(paymentId).getPayment();
和测试中的一个。为什么这个在这里?
when(squareClient.getPaymentsApi().getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);
我的问题
首先,应该只有1个调用。
其次,当我检查 2 次时
verify(squareClient, times(2)).getPayment("p1")
我得到一个 空指针 因为 getPaymentsApi() 现在是空的。这是因为模拟 when() 没有第二次应用吗?
直接在 PaymentsApi 对象上应用 @Test 中的 when() 语句。
when(paymentsApi.getPayment("p1")).thenReturn(VALID_PAYMENT_RESPONSE);
使用 "when()" 时不能链接方法调用。