【发布时间】:2018-03-18 13:27:46
【问题描述】:
我正在 SpringBoot 中的 RestController 上编写集成测试。 通常我会使用 SpringRunner.class 运行,但是当涉及到 Mock 静态方法时,我需要使用 PowerMock。
奇怪的事实是,当我运行单个测试时,它们单独通过(但返回错误消息),当我尝试运行整个测试类时,没有测试通过并且返回相同的错误消息。
@RunWith(PowerMockRunner.class)
@PrepareForTest({JwtUtils.class})
//@PowerMockRunnerDelegate(SpringRunner.class) THIS DOESN'T WORK!!!
@SpringBootTest(classes = SpringBootJwtApplication.class)
public class RestAccessIntegrationTest {
@Autowired @InjectMocks
RestController restController;
@Mock
HttpServletRequest request;
@Test
public void operationsPerAccountWhenSuccessfulTest(){
mockStatic(JwtUtils.class);
when(JwtUtils.myMethod(request)).thenReturn("blabla");
String expected = ... ;
String actual = restController.getOperations();
assertEquals(actual, expected);
}
}
如果我运行测试或整个类,我会收到这种类型的错误:
线程“主”java.lang.NoSuchMethodError 中的异常:org.powermock.core.MockRepository.addAfterMethodRunner(Ljava/lang/Runnable;)at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator .java:50)
如果我取消注释 @PowerMockRunnerDelegate(SpringRunner.class) 会出现另一个错误:
线程“主”java.lang.NoClassDefFoundError 中的异常:org/powermock/core/testlisteners/GlobalNotificationBuildSupport$Callback 在 org.powermock.modules.junit4.internal.impl.DelegatingPowerMockRunner.run(DelegatingPowerMockRunner.java:139)
【问题讨论】:
标签: unit-testing spring-boot junit mockito powermock