PowerMock Mockito ignore junit FixMethodOrder



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

我有一个类,它必须对一些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)方法的mocking不起作用。但是将类留给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)

它们现在按预期顺序运行。我相信这是有效的,因为运行测试的不是PowerMock,而是JUnit4本身。

类似于一个变通方法:创建一个新方法(比如说"testAll"),只为此放置@Test注释(从其他方法中删除@Test注释),然后在已注释的方法中调用测试方法。

脏,但它工作。

@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 testAll(){
        this.test0001Create();
        this.test0002Edit();
        this.test0003Delete();
    }
    public void test0001Create(){}
    public void test0002Edit(){}
    public void test0003Delete(){}
}

请尝试更改序列:

  1. @FixMethodOrder(MethodSorters.NAME_ASCENDING)
  2. @RunWith(PowerMockRunner.class)
  3. @PrepareForTest(ClassWithStaticMethods.class)

我不知道为什么它不能与PowerMockRunner注释一起使用,而是可以使用PowerMockRule

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTestingClass extends SomeTestBaseClass {
    @Rule
    public PowerMockRule rule = new PowerMockRule();
    @BeforeClass
    public static void init() throws Exception {
        // mocking the FacesContext and others
    }
    @Test
    public void test0001Create() {
    }
    @Test
    public void test0002Create() {
    }
    @Test
    public void test0003Create() {
    }
}

相关内容

  • 没有找到相关文章

最新更新