Я хочу присвоить методу generateReferenceNumber () в моем классе Invoice:
public class Invoice {
private String id;
private String referenceNumber;
private Date issueDate;
private PaymentMethod paymentMethod;
private Date paymentDate;
private String shopId;
private List<InvoiceGroupItem> groupItems;
private InvoiceStatus status;
public void moveToNextState() {
status = status.nextState();
}
public void generateReferenceNumber() {
if (referenceNumber != null) {
return;
}
referenceNumber = new InvoiceReference().createNew(issueDate).toString();
}
}
Этот объект используется в сервисе, который я хочу протестировать. Для этого мне нужно несколько счетов. Итак, я написал следующий код:
private Stream<Invoice> buildApprovedInvoice() {
val approvedInvoices = new ArrayList<Invoice>();
for (int i = 0; i < 10; i++) {
val invoice = Invoice.builder().build();
val spy = spy(invoice);
doAnswer(invocation -> {
final Invoice mock = (Invoice) invocation.getMock();
mock.setReferenceNumber("Invoice reference number");
return null;
}).when(spy).generateReferenceNumber();
approvedInvoices.add(spy);
}
return approvedInvoices.stream();
}
И когда я выполняю тест, я получаю следующую ошибку:
org.mockito.exceptions.misusing.UnfinishedStubbingException: Незавершенная заглушка обнаружено здесь: -> в com.coruscant.core.services.invoice.InvoiceSendingServiceTest.sendInvoices (InvoiceSendingServiceTest. java: 54)
Например, thenReturn () может отсутствовать. Примеры правильной заглушки: when (mock.isOk ()). ThenReturn (true); когда (mock.isOk ()) thenThrow (исключение). doThrow (исключение) .when (mock) .someVoidMethod ();
У кого-нибудь есть идея, почему?
Спасибо.