gpt4 book ai didi

testing - 使用 PowerMockito 和 @BeforeClass 的一般夹具设置

转载 作者:行者123 更新时间:2023-11-28 21:09:58 25 4
gpt4 key购买 nike

我有一个测试,我在其中配置了一些通用装置,但是在使用 PowerMockRule 之后,我在 @BeforeClass 方法中配置的静态变量重置为 null。这会导致以下测试失败,但是如果您删除 PowerMockRule 它会通过。

public class Test
{
@Rule
public PowerMockRule rule = new PowerMockRule();

private static String MyString;

@BeforeClass
public static void setupClass() throws Exception
{
MyString = "FOO";
}

@org.junit.Test
public void test() throws Exception
{
assertEquals("FOO", MyString);
}
}

最佳答案

我有答案,但你不会喜欢它。

简答:看起来像是 PowerMock 的缺陷,所以 create a issue在我们的错误跟踪器中

长答案:您可能知道 PowerMock 能够通过自定义类加载器和修改的字节代码模拟静态、私有(private)等加载类。然后使用@PowerMockRunner然后PowerMock可以控制加载一个测试类,测试类也由自定义类加载器加载。如果另一个 jUnitRunner 运行测试并使用 PowerMockRule,则测试类和测试所需的所有其他类都使用标准类加载器加载。 PowerMock 通过使用带有序列化/反序列化的深度处理或使用 objenesis 来重新加载所有这些类。 .因此,当重新加载类时,所有初始化的静态字段都是 null

我已经简要检查了代码,但没有找到适合您的案例的测试,我们处理了 @BeforeClass,所以 create a issue在我们的错误跟踪器中,我会深入检查它。

顺便也请指出你用的是哪个版本,用的是什么依赖。

关于testing - 使用 PowerMockito 和 @BeforeClass 的一般夹具设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756257/

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