gpt4 book ai didi

java - @RunWith(PowerMockRunner.class) 是否在每次测试之前为用@Mock 注释的成员注入(inject)新的模拟?

转载 作者:行者123 更新时间:2023-11-29 05:25:58 24 4
gpt4 key购买 nike

...还是在任何测试运行之前只执行一次?

@RunWith(PowerMockRunner.class)
public class Tests {
@Mock
private ISomething mockedSomething;

@Test
public void test1() {
// Is the value of mockedSomething here
}

@Test
public void test2() {
// ... guaranteed to be either the same or a different instance here? Or is it indeterminate?
}
}

最佳答案

PowerMockRunner,像大多数 JUnit 运行器一样,创建 a brand new test class instance for every test .这有助于确保测试不会相互干扰。

PowerMock 源代码有点难以理解,它具有每个 JUnit 版本的委托(delegate)和类加载器保存的“ block ”,但您可以看到 here in PowerMockJUnit44RunnerDelegateImpl:189每次调用 invokeTestMethod 时,它都会从 createTest 中获取一个新实例,而 createTest 是从 createTestInstance 中获取的。

PowerMock 然后用新的模拟填充新实例。 @Mock 注入(inject)的文档有点难找,但我在 PowerMock TestListeners wiki page 上找到了一些.事实证明,AnnotationEnabler 类因支持库而异— this is the Mockito one, for instance — 但两者都在 beforeTestMethod 上重新注入(inject)新的模拟。

请注意,静态字段可能会在测试之间保留,因此尽管实例字段将为每个测试方法重新填充,但静态字段不会。避免在测试中使用可变静态字段,无论您是否使用 PowerMock。

关于java - @RunWith(PowerMockRunner.class) 是否在每次测试之前为用@Mock 注释的成员注入(inject)新的模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22671145/

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