gpt4 book ai didi

java - 将 PowerMockRunner 与 Junit 测试套件结合使用

转载 作者:行者123 更新时间:2023-12-01 06:12:32 24 4
gpt4 key购买 nike

我正在尝试使用 PowerMockRunner 创建一个 Junit 测试套件,但它不起作用。

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(MainTest.class)
@Suite.SuiteClasses({ MainTest.Class1Test.class })
@PrepareForTest({
StaticFieldsProvider.class
})
public class MainTest extends Suite {

public MainTest(Class<?> klass, RunnerBuilder builder)
throws InitializationError {
super(klass, builder);
}

public static class TestBase {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
PowerMockito.mockStatic(StaticFieldsProvider.class);
}
}

public static class Class1Test extends TestBase {
@Before
public void setUp() {
super.setUp();
}

@Test
public void test(){
assertTrue(true);
}
}
}

当我尝试运行时,它失败并出现错误 -

java.lang.IllegalArgumentException: Test class can only have one constructor at org.junit.runners.model.TestClass.(TestClass.java:40)

关于如何在上述情况下使用 PowerMockRunner 有什么建议吗?

谢谢

最佳答案

这是一个老问题,因此我们可能无法确定该解决方案是否适用于 OP;但这可能有效(如果没有访问 StaticFieldsProvider ,我无法验证,但如果我将其与我自己的类(class)之一交换,它就有效)。我希望有人能够编辑并添加更多解释来解释为什么这样做:

@RunWith(PowerMockRunner.class)
// * Delegate to Suite.class instead of MainTest.class *
@PowerMockRunnerDelegate(Suite.class)
@Suite.SuiteClasses({ MainTest.Class1Test.class })
@PrepareForTest({
StaticFieldsProvider.class
})
// * Don't extend Suite *
public class MainTest {

// * Remove constructor *

public static class TestBase {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
PowerMockito.mockStatic(StaticFieldsProvider.class);
}
}

public static class Class1Test extends TestBase {
@Before
public void setUp() {
super.setUp();
}

@Test
public void test(){
assertTrue(true);
}
}
}

如果它对其他人有帮助,我的情况略有不同,因为我的套件中只有几个类需要 PowerMockRunner (并且不要模拟相同的事情,因此模拟需要在每个单独的测试类中而不是在运行器中进行)。看来只要我@PrepareForTest在我的运行者中(如上所述)我在某些测试类中需要的类,我仍然可以在 @Before 中创建模拟(或任何地方)适用的测试类别。希望这会有所帮助。

关于java - 将 PowerMockRunner 与 Junit 测试套件结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32407567/

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