【问题标题】:PowerMockito: doThrow unfinished stubbingPowerMockito:doThrow 未完成的存根
【发布时间】:2014-11-03 19:17:24
【问题描述】:

我试图通过抛出异常来模拟我的 JUnit 测试中的失败情况。但是,我似乎无法正确地存根某些方法。

我的代码如下:

private MyClass mockObject;

@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);

    mockObject = PowerMockito.mock(MyClass.class);
    whenNew(MyClass.class).withAnyArguments().thenReturn(mockObject);
}

@Test
public void testFailure() throws Exception {
    PowerMockito.doThrow(new Exception("This is a test exception.")).when(mockObject).register(anyString());
    ...
}

,其中register的返回类型为void

但是,当我执行这个测试时,我在doThrow 调用中得到一个未完成的存根异常。

org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here:
-> at org.powermock.api.mockito.internal.PowerMockitoCore.doAnswer(PowerMockitoCore.java:36)

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();
Hints:
 1. missing thenReturn()
 2. you are trying to stub a final method, you naughty developer!

任何人都可以帮助确定我在这里缺少什么吗?

如果有帮助,我的 pom 中的 powermock-api-mockito 和 powermock-module-junit4 的依赖版本都是 1.5.6。

【问题讨论】:

  • 看起来不错,你@PrepareForTest(ClassUnderTest.class) 吗?你的注册方法是最终的吗?还是 MyClass 决赛?
  • 是的,我确实使用PrepareForTest(ClassUnderTest.class) 注释了该类,其中 MyClass 的新实例正在构造函数中创建。至于最终,方法和类都不是最终的。
  • 如果您的类是在构造函数中创建的,那么您的 CLassUnderTest 相对于测试用例中的 whenNew 调用在哪里创建?
  • 它实际上是在我的测试方法中的 doThrow 调用之后,但我在示例中省略了它。就像这样:ClassUnderTest helper = new ClassUnderTest();。测试方法只包含这两行。
  • 问题出在与此代码无关的静态模拟上。我在@BeforeClass 方法中有mockStatic(AnotherClass.class); doNothing().when(AnotherClass.class);。删除 doNothing() 行后,测试工作正常。感谢您的帮助..

标签: java unit-testing junit powermock


【解决方案1】:

问题出在与此代码无关的静态模拟上。我有 mockStatic(AnotherClass.class); doNothing().when(AnotherClass.class);在@BeforeClass 方法中。删除 doNothing() 行后,测试工作正常。感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多