Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

issues while using @RunWith Annotation and powerMock

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

like image 241
Bhuvan Avatar asked Aug 28 '12 11:08

Bhuvan


2 Answers

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 !

like image 57
Pom12 Avatar answered Nov 04 '22 14:11

Pom12


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
like image 15
gontard Avatar answered Nov 04 '22 13:11

gontard