PowerMock Mockito 忽略 junit FixMethodOrder

Cio*_*rei 4 java mocking junit4 mockito powermock

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

我有一个类必须对一些 JSF bean 进行测试。为了实现这一点,我使用 PowerMock 和 Mockito 来模拟在 JSF bean 中使用的 FacesContext、RequestContext 和其他静态方法。

@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(){}
}
Run Code Online (Sandbox Code Playgroud)

SomeTestBaseClass,没什么复杂的。

public abstract class SomeTestBaseClass {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        //...
    }
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是测试的顺序被忽略了(即使有 FixMethodOrder 注释)。如果我删除 PowerMockRunner(和 RunWith 注释),顺序会保留,但对静态(和无效)方法的模拟不起作用。但是离开 PowerMockRunner 类,注释 @FixMethodOrder 被完全忽略。

我什至尝试过 MockitoJUnitRunner,这里保留了测试的顺序,但是没有完成静态(和无效)方法的模拟。

有谁知道为什么会这样?

谢谢

jhy*_*pud 5

我在让它们以正确的顺序运行时遇到了同样的问题。我通过使用@PowerMockRunnerDelegate注释解决了它。

在我的测试类注释中:

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@RunWith(PowerMockRunner.class)
Run Code Online (Sandbox Code Playgroud)

我补充说@PowerMockRunnerDelegate(JUnit4.class)

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(JUnit4.class)
Run Code Online (Sandbox Code Playgroud)

它们现在按预期顺序运行。我相信这是可行的,因为那时运行测试的不是 PowerMock,而是 JUnit 4 本身。