我在这里有一个小问题,我不知道如何解决。

我有一个必须对一些JSF bean进行测试的类。
为了实现这一点,我将PowerMock与Mockito一起用于模拟FacesContext,RequestContext和JSF bean内部使用的其他静态方法。

@PrepareForTest(ClassWithStaticMethods.class)
@RunWith(PowerMockRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTestingClass extends SomeTestBaseClass{

    @BeforeClass
    public static void init() throws Exception{
        //mocking the FacesContext and others
    }

    @Test
    public void test0001Create(){}

    @Test
    public void test0002Edit(){}

    @Test
    public void test0003Delete(){}
}

SomeTestBaseClass,没有什么复杂的。
public abstract class SomeTestBaseClass {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        //...
    }
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        //...
    }
}

问题在于测试顺序被忽略(即使使用FixMethodOrder批注也是如此)。如果删除PowerMockRunner(和RunWith批注),则顺序将保留,但模拟静态(和void)方法无效。
但是将类留给PowerMockRunner,则@FixMethodOrder注释将完全被忽略。

我什至尝试使用MockitoJUnitRunner,并且这里保留了测试的顺序,但是静态(和void)方法的模拟并未完成。

有谁知道为什么会这样吗?

谢谢

最佳答案

我有同样的问题。
我通过使用@PowerMockRunnerDelegate批注解决了它:

在我的测试类注释中:

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@RunWith(PowerMockRunner.class)

我添加了@PowerMockRunnerDelegate(JUnit4.class):
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(JUnit4.class)

它们现在按预期顺序运行。

09-27 07:00