当我尝试执行以下简化的JUnit测试时,它成功但我收到一条错误消息:首先创建所有测试实例时不支持通知!
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(BlockJUnit4ClassRunner.class)
@PrepareForTest({ A.class })
public class TestA extends TestB {
@Test
public void test() throws Exception {
assertEquals(true, true);
}
}
public class TestB {}
public class A {}
当我删除@PowerMockRunnerDelegate(BlockJUnit4ClassRunner.class)
,extends TestB
或@PrepareForTest({ A.class })
时,消息会消失。即使是emtpy @PrepareForTest({ })
也会显示错误消息。
我发现了post,但这不是同一个问题,因为我没有使用扩展BlockJUnit4ClassRunner
。
我试图理解为什么会出现此错误消息。
我正在使用最新版本的Powermock(1.6.6)和JUnit 4.12并使用java8运行测试。
答案 0 :(得分:2)
PowerMock在测试生命周期中扩展了jUnit事件消息并触发了一些其他事件。 PowerMockTestListener
可用于监听所有jUnit和其他PowerMock事件。
此事件之一要求创建每个测试的实例。 jUnit运行器通常为类中的每个测试方法创建一个新的测试类实例,但是其中一些只能为所有测试创建一个类实例。当使用@PowerMockRunnerDelegate
时,委托的运行者负责创建测试实例。
如果在没有“test created”的情况下触发事件“test start”,则PowerMock会在测试开始之前检测到所有测试实例都已创建,并且无法触发其内部事件,并且此消息将打印到system.err。因此,您遇到与帖子中描述的问题相同的问题。
PowerMock目前只有一个实现PowerMockTestListener
- AnnotationEnabler。此实现用于与EasyMock和Mockito集成,并支持@TestSubject
,@Mock
等注释。因此,您在控制台中看到此消息表示这些功能无法正常工作。但对于Mockito案例,可以使用MockitoAnnotations.initMocks(this)
更容易解决。
非常有趣的是,如果你删除'extends TestB',消息就会消失。我会检查这个案子并调查它为什么会发生。