gpt4 book ai didi

junit - Powermock:首先创建所有测试实例时不支持通知

转载 作者:行者123 更新时间:2023-12-04 14:26:05 28 4
gpt4 key购买 nike

当我尝试执行以下简化的 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 }),消息消失。即使是空的 @PrepareForTest({ }) 也会出现错误消息。

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

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

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

最佳答案

PowerMock 扩展了 jUnit 事件消息并在测试生命周期中触发了一些额外的事件。 PowerMockTestListener 可用于监听所有 jUnit 和其他 PowerMock 事件。

其中一个事件要求为每个测试创建一个实例。 jUnit runner 通常会为类中的每个测试方法创建一个新的测试类实例,但其中一些只能为所有测试创建一个类实例。当使用 @PowerMockRunnerDelegate 时,委托(delegate)运行器负责创建测试实例。

如果事件“test start”在没有“test created”的情况下触发,那么 PowerMock 会检测到所有测试实例都是在测试开始之前创建的,并且无法触发其内部事件,并且此消息将打印到 system.err。因此,您遇到的问题与帖子中描述的问题相同。

PowerMock 目前只有一个实现 PowerMockTestListener - AnnotationEnabler。此实现用于与 EasyMock 和 Mockito 集成,支持 @TestSubject@Mock 等注解。结果,您会在控制台中看到此消息,这意味着这些功能无法正常工作。但是对于 Mockito 的情况,使用 MockitoAnnotations.initMocks(this) 可以更容易地修复它。

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

关于junit - Powermock:首先创建所有测试实例时不支持通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43393043/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com