- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的发票类中 stub 方法generateReferenceNumber():
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: Unfinished stubbing detected here: -> at com.coruscant.core.services.invoice.InvoiceSendingServiceTest.sendInvoices(InvoiceSendingServiceTest.java:54)
E.g. thenReturn() may be missing. Examples of correct stubbing: when(mock.isOk()).thenReturn(true); when(mock.isOk()).thenThrow(exception); doThrow(exception).when(mock).someVoidMethod();
有人知道为什么吗?
谢谢。
最佳答案
您不需要模拟 Invoice
来测试它。或者,如果是单元测试,您可以模拟 InvoiceReference
。如果是集成测试:
class Test {
private Invoice invoice;
@BeforeEach
void setUp() {
invoice - new Invoice();
}
@Test
void shouldSetReferenceNumber_WhenReferenceNumberEqualsNull() {
invoice.setIssueDate(new Date());
invoice.generateReferenceNumber();
assertThat(invoice).hasFieldWithValue("referenceNumber", expectingValue);
}
@Test
void shouldNotSetReferenceNumber_WhenReferenceNumberIsNotEqualsNull() {
invoice.setReferenceNumber("test-reference-number");
invoice.generateReferenceNumber();
assertThat(invoice).hasFieldWithValue("referenceNumber", "test-reference-number");
}
}
单元测试(模拟 InvoiceReference):
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;
}
getInvoiceReference().createNew(issueDate).toString();
}
public InvoiceReference getInvoiceReference() {
return new InvoiceReference();
}
}
class Test {
private Invoice invoice;
@Mock
private InvoiceReference invoiceReference;
@BeforeEach
void setUp() {
invoice = new Invoice();
MockitoAnnotations.initMocks(this);
when(invoiceReference.createNew(any(Date.class)).thenReturn("test-reference-number");
}
@Test
void shouldSetReferenceNumber_WhenReferenceNumberEqualsNull() {
invoice.setIssueDate(new Date());
invoice.generateReferenceNumber();
assertThat(invoice).hasFieldWithValue("referenceNumber", "test-reference-number");
}
@Test
void shouldNotSetReferenceNumber_WhenReferenceNumberIsNotEqualsNull() {
invoice.setReferenceNumber("different_reference_number");
invoice.generateReferenceNumber();
assertThat(invoice).hasFieldWithValue("referenceNumber", "different_reference_number");
}
}
关于java - 多次模拟时出现 Mockito UnfinishedStubbingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60440670/
我已经 mock 了 couchbase 类,例如 @Mock CouchBaseRepository couchBaseRepository; 并尝试使用它: boolean ifExists =
您好,我有这个 PowerMockito 测试,它会抛出 UnfinishedStubbingException @RunWith(PowerMockRunner.class) @PrepareFor
测试代码为: import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; i
@MockBean private RestTemplateBuilder restTemplateBuilder; @MockBean private RestTemplate restTempla
我是 Mockito 的新手,我曾尝试调查此异常,但我还没有找到具体的答案。当我一起使用两个模拟时,它会发生在我的代码中,这意味着我通过一个模拟的构造函数,另一个模拟。像这样: ... Operati
我已经阅读了很多有关此错误的内容,但找不到解决方案。 这是我的示例代码,您可以复制它并启动它以重现错误。 主类: package example; import org.junit.runner.Ru
我想在我的发票类中 stub 方法generateReferenceNumber(): public class Invoice { private String id; privat
我正在尝试模拟一个客户端响应不佳的服务进行测试。我仍然在 min eclass 中收到 UnfinishedStubbingException 而不是 ClientResponseFailure,而且
当另一个方法中的 spyAnotherService.getUrl(ID) 时,我试图进行 spy /模拟并返回一个虚拟 Url,该方法是 myService.deleteSomething(name
您好,我正在尝试使用 Mockito 测试方法并收到 UnfinishedStubbingException。我是 Mockito 的新手,不确定我是否在做一些了不起的事情:) 这些是我的 stub
我想测试一个内部使用静态方法的方法,这就是我使用 PowerMockito 的原因。我想模拟对 Request.Get 的调用来自 Http 客户端 Fluent API。我设置了一个简单的测试,但出
好吧,我显然不太明白 doReturn(...).when(...) 和 when(...).thenReturn(...) 之间的区别。 问题是,当我上课时,我用 @Mock 注释模拟,并在我想测试
我可以将模拟对象作为参数传递给 thenThrow() 方法吗?我有这样的东西: public class MyException extends Exception { public MyE
尝试让 Mockito 和 PowerMock 正常运行,但在尝试运行此代码时遇到 UnfinishedStubbingException: @RunWith(PowerMockRunner.clas
我正在尝试使用 Mockito 的 Spy 部分模拟服务,覆盖一个方法以使其返回一致的数据以进行测试,但说 spy 无缘无故抛出 UnfinishedStubbingException。 这是我的测试
运行以下代码时,我收到错误消息 Unfinished Stubbing here detected: import static org.mockito.Mockito.mock; import st
我正在尝试verify在FileChooser上调用方法。 我在Groovy中编码,这似乎是问题所在。 我正在使用“孵化”的Mockito功能,该功能甚至可以模拟final类。 代码是: Fi
我有一个 LoggerInterceptor 类,其参数为 InspirationContext。对于这门课,我试图编写一个单元测试,但我被困在第一行: public class LoggerInte
以下代码导致 UnfinishedStubbingException PowerMockito.doNothing().when(widgetHelper).invokeAuditService(Ma
我写了下面的代码: @RunWith(PowerMockRunner.class) @PrepareForTest(Integer.class) public class TestClass{
我是一名优秀的程序员,十分优秀!