使用 PowerMockito 测试静态方法时出现 MissingMethodInvocationException
MissingMethodInvocationException when using PowerMockito to test static method
我阅读了几篇关于使用 powermockito 而不是 mockito 来测试静态方法的帖子,但是在切换到 power mockito 之后,我仍然遇到同样的错误。下面是我的 class 和异常。异常中的两种情况都无法解释我遇到的错误。
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
public class Test extends AbstractTestNGSpringContextTests {
@Mock
Object1 o1;
@BeforeMethod
public void init() {
mockStatic(ClassToBeMocked.class);
PowerMockito.when(ClassToBeMocked.getMethod()).thenReturn("string");
}
最后一行代码导致了这个异常
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() 需要一个必须为 'a method call on a mock' 的参数。
例如:
当(mock.getArticles()).thenReturn(文章);
此外,出现此错误的原因可能是:
1. 您对以下任一方法存根:final/private/equals()/hashCode() 方法。
那些方法不能是stubbed/verified。
不支持在非 public 父 classes 上声明的模拟方法。
2. 在 when() 内部,你不是在 mock 上调用方法,而是在其他一些对象上调用方法。
你能试试这个吗:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
public class Test extends PowerMockTestCase {
@Mock
Object1 o1;
@ObjectFactory
public IObjectFactory getObjectFactory() {
return new org.powermock.modules.testng.PowerMockObjectFactory();
}
@BeforeMethod
public void init() {
mockStatic(ClassToBeMocked.class);
PowerMockito.when(ClassToBeMocked.getMethod()).thenReturn("string");
}
我实际上正在为类似的问题而苦苦挣扎,但我确实看到上面的问题。 @RunWith 注释是 JUnit 库的一部分。 AbstractTestNGSpringContextTests 和@BeforeMethod 是 TestNG 库的一部分。这可能就是您 运行 遇到问题的原因。除非有人想反驳这个说法,否则我相信这两个单元测试库不能相互配合。至少不是那样。
@RunWith(PowerMockRunner.class) 将无法获取 @BeforeMethod,就好像它是 org.junit.Before.
我阅读了几篇关于使用 powermockito 而不是 mockito 来测试静态方法的帖子,但是在切换到 power mockito 之后,我仍然遇到同样的错误。下面是我的 class 和异常。异常中的两种情况都无法解释我遇到的错误。
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
public class Test extends AbstractTestNGSpringContextTests {
@Mock
Object1 o1;
@BeforeMethod
public void init() {
mockStatic(ClassToBeMocked.class);
PowerMockito.when(ClassToBeMocked.getMethod()).thenReturn("string");
}
最后一行代码导致了这个异常 org.mockito.exceptions.misusing.MissingMethodInvocationException: when() 需要一个必须为 'a method call on a mock' 的参数。 例如: 当(mock.getArticles()).thenReturn(文章);
此外,出现此错误的原因可能是: 1. 您对以下任一方法存根:final/private/equals()/hashCode() 方法。 那些方法不能是stubbed/verified。 不支持在非 public 父 classes 上声明的模拟方法。 2. 在 when() 内部,你不是在 mock 上调用方法,而是在其他一些对象上调用方法。
你能试试这个吗:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
public class Test extends PowerMockTestCase {
@Mock
Object1 o1;
@ObjectFactory
public IObjectFactory getObjectFactory() {
return new org.powermock.modules.testng.PowerMockObjectFactory();
}
@BeforeMethod
public void init() {
mockStatic(ClassToBeMocked.class);
PowerMockito.when(ClassToBeMocked.getMethod()).thenReturn("string");
}
我实际上正在为类似的问题而苦苦挣扎,但我确实看到上面的问题。 @RunWith 注释是 JUnit 库的一部分。 AbstractTestNGSpringContextTests 和@BeforeMethod 是 TestNG 库的一部分。这可能就是您 运行 遇到问题的原因。除非有人想反驳这个说法,否则我相信这两个单元测试库不能相互配合。至少不是那样。
@RunWith(PowerMockRunner.class) 将无法获取 @BeforeMethod,就好像它是 org.junit.Before.