issues while using @RunWith Annotation and powerMo

2019-02-09 03:00发布

Initially I was using only Mockito in junits so I was using SpringJUnit4ClassRunner.class in @RunWith annotation ie

@RunWith(SpringJUnit4ClassRunner.class) 

due to which spring dependency injection was working fine and was getting a bean through

@Autowired

Someservice someservice ;

But now, I have also integrated PowerMock in it.

So as per doc , I have replaced class mentioned in @RunWith annotation with

@RunWith(PowerMockRunner.class)

but now, someservice is coming out to be null. Is there a way to use both SpringJUnit4ClassRunner.class and PowerMockRunner.class in @RunWith annotation

2条回答
等我变得足够好
2楼-- · 2019-02-09 03:51

You have to use the PowerMockRule.

@RunWith(SpringJUnit4ClassRunner.class) 
@PrepareForTest(X.class)
public class MyTest {
    @Rule
    public PowerMockRule rule = new PowerMockRule();

    // Tests goes here
    ...
}

For a full example of the Spring Integration Test with PowerMock and Mockito, you could checkout this maven project.

svn co http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/
cd spring-mockito/

Look at the dependecies to powermock.

less pom.xml

and then run the test

mvn test

and you should get the following test results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
查看更多
兄弟一词,经得起流年.
3楼-- · 2019-02-09 03:59

I know this thread is old, but it's good to add that since 2014 and this pull request, you can use the @PowerMockRunnerDelegate annotation to "delegate" the run context to SpringJUnit4ClassRunner (or any other runner really).

Above code would look like :

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
@PrepareForTest(X.class);
public class MyTest {

    // Tests goes here
    ...
}

With this annotation, you don't need the PowerMock rule anymore !

查看更多
登录 后发表回答