如何解决Powermockito不模拟静态方法
我有这个测试班:
@ExtendWith(SpringExtension.class)
@RunWith(PowerMockRunner.class)
@PrepareForTest({StaticClass.class})
public class ClassNameTest {
@InjectMocks
private ClassNameTest classNameTest;
@Mock
private DependencyClass dependencyClass;
/* Other dependencies annotated with @Mock */
@Test
public void testFunction() {
/* Mocking of the dependencies using Mockito.when() and friends. */
PowerMockito.spy(StaticClass.class);
Powermockito.when(StaticClass.function(Mockito.any()).thenReturn(/* The object function returns */);
/* Rest of the test code. */
}
}
我正在测试的函数在一行中的某处如下所示:
ReturnObject ro = StaticClass.function(parameter);
很显然,我想要防止被调用的StaticClass并返回特制对象。是的,我知道这个静态类不是最好的方法,但这超出了我当前问题的范围。
我的问题是,在调试测试代码时,它实际上在调用Powermockito.when
时进入了StaticClass.function,但在那里失败,因为以某种方式输入的值为空。
我看过的所有教程和指南都说这基本上是我需要做的,所以我在这里完全迷路了。有什么想法吗?
解决方法
您是否正在使用JUnit 5或4运行测试?目前尚不清楚,因为您同时使用@ExtendWith(JUnit5批注)和@RunWith(JUnit4)。
- 如果您使用的是JUnit 5,则暂时不支持PowerMock。
@RunWith(PowerMockRunner.class)
被忽略,@PrepareForTest({StaticClass.class})
无效,因此StaticClass
未初始化。 - 使用JUnit 4,该测试应能按预期工作,尽管
@ExtendWith(SpringExtension.class)
无法正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。