- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我是 Mockito 的新手,我曾尝试调查此异常,但我还没有找到具体的答案。当我一起使用两个模拟时,它会发生在我的代码中,这意味着我通过一个模拟的构造函数,另一个模拟。像这样:
...
OperationNode child = getNode(Operation.ADD);
child.insertNode(getConstantNode(getIntegerValue(2));
...
private ConstantNode getConstantNode(NumericalValue value){
ConstantNode node = Mockito.mock(ConstantNode.class);
Mockito.when(node.evaluate()).thenReturn(value);
Mockito.when(node.toString()).thenReturn(value.toString());
return node;
}
private IntegerValue getIntegerValue(int number) {
IntegerValue integerValue = Mockito.mock(IntegerValue.class);
Mockito.when(integerValue.getValue()).thenReturn(number);
Mockito.when(integerValue.toString()).thenReturn(Integer.toString(number));
return integerValue;
}
在一个论坛中,我读到了关于不通过另一个模拟的构造函数发送模拟的信息,因为 Mockito 可能会对模拟调用感到困惑,所以我尝试了以下方法:
NumericalValue value = getIntegerValue(2);
child.insertNode(getConstantNode(value));
但无济于事。我确保只有方法 toString()
和 getValue()
被调用,因为这些是类仅有的方法。我不明白发生了什么。
我也尝试过单独使用模拟,看看我是否做错了什么:
child.insertNode(new ConstantNode(getIntegerValue(2)));
效果很好。
child.insertNode(getConstantNode(new IntegerValue(2)));
这也很好用。
最佳答案
根据我在 mockito (https://code.google.com/p/mockito/issues/detail?id=53) 的“第 53 期”中读到的内容,由于 Mockito 中涉及的验证框架,我的代码遇到了问题。正是以下代码本身导致了异常。
private ConstantNode getConstantNode(NumericalValue value){
ConstantNode node = Mockito.mock(ConstantNode.class);
Mockito.when(node.evaluate()).thenReturn(value);
Mockito.when(node.toString()).thenReturn(value.toString());
return node;
}
如果你记得我的代码,参数值是 ALSO A MOCK,所以当 thenReturn()
上调用 value.toString()
时,我相信(如果我错了,请有人纠正我)验证框架被触发,并确保每个“何时”都有其 thenReturn()
调用/验证/等。因此,如果发生这种情况, Mockito.when(node.toString()).thenReturn(value.toString()
将不会被验证,因为它还没有从value.toString()
,它启动了整个“验证一切”链。
我是如何解决的:
private ConstantNode getConstantNode(NumericalValue value){
ConstantNode node = Mockito.mock(ConstantNode.class);
Mockito.when(node.evaluate()).thenReturn(value);
String numberToString = value.toString();
Mockito.when(node.toString()).thenReturn(numberToString);
return node;
}
这样,它可以得到验证。我发现这是一种完整的代码异味,因为我将不得不留下一条注释来解释为什么我在代码中使用了一个看似无用的中间变量。
感谢您的帮助。
关于java - Mockito UnfinishedStubbingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15554119/
我已经 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{
我是一名优秀的程序员,十分优秀!