3

当我尝试执行以下简化的 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({ })出现错误消息。

我找到了这篇文章,但不是同一个问题,因为我没有使用扩展的BlockJUnit4ClassRunner.

我试图了解为什么会出现此错误消息。

我正在使用最新版本的 Powermock (1.6.6) 和 JUnit 4.12 并使用 java8 运行测试。

4

1 回答 1

3

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).

非常有趣的是,如果您删除“扩展 TestB”,则该消息将消失。我会检查这个案例并调查它发生的原因。

于 2017-04-25T06:30:26.860 回答