проблемы при использовании @RunWith Annotation и powerMock

Первоначально я использовал только Mockito в junits, поэтому я использовал SpringJUnit4ClassRunner.class в аннотации @RunWith, т.е.

@RunWith(SpringJUnit4ClassRunner.class) 

из-за чего инъекция зависимостей Spring работала нормально и проходила через bean-компонент

@Autowired

Someservice someservice ;

Но теперь я также интегрировал в него PowerMock.

Итак, согласно doc, я заменил класс, упомянутый в аннотации @RunWith, на

@RunWith(PowerMockRunner.class)

но теперь someservice оказывается нулевым. Есть ли способ использовать как SpringJUnit4ClassRunner.class, так и PowerMockRunner.class в аннотации @RunWith


person Bhuvan    schedule 28.08.2012    source источник


Ответы (2)


Я знаю, что эта ветка устарела, но стоит добавить, что с 2014 года и этот запрос на вытягивание , вы можете использовать аннотацию @PowerMockRunnerDelegate, чтобы «делегировать» контекст выполнения SpringJUnit4ClassRunner (или любому другому исполнителю).

Приведенный выше код будет выглядеть так:

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

    // Tests goes here
    ...
}

С этой аннотацией вам больше не нужно правило PowerMock!

person Pom12    schedule 09.02.2017

Вы должны использовать PowerMockRule.

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

    // Tests goes here
    ...
}

Чтобы увидеть полный пример теста интеграции Spring с PowerMock и Mockito, вы можете проверить это проект maven.

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

Посмотрите на зависимости от powermock.

less pom.xml

а затем запустите тест

mvn test

и вы должны получить следующие результаты теста:

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
person gontard    schedule 28.08.2012
comment
Привет, гонтард, я пробовал ваше решение, но когда я выполнял свой junit, я получал исключение, что правило PowerMockRule должно быть общедоступным, поэтому я сделал его общедоступным, и теперь я получаю javassist.NotFoundException. Есть предположения? Исключение java.lang.RuntimeException: javassist.NotFoundException: $ Proxy88 в org.powermock.core.classloader.MockClassLoader.loadUnmockedClass (MockClassLoader.java:187) в org.powermock.core.classloader.Class.classoader.Class.classoified14ass.classoader: ) .... - person Bhuvan; 29.08.2012
comment
@bhuvan, я не знаю, возможно, это эта проблема. Я тоже завершаю свой ответ. - person gontard; 29.08.2012
comment
@gontard powermock.googlecode.com/svn/tags /powermock-1.4.12/examples/ - ссылка больше не работает. - person old-monk; 10.10.2017