Я прочитал несколько сообщений об использовании powermockito вместо просто mockito для тестирования статических методов, однако после переключения на power mockito я все еще получаю ту же ошибку. Ниже мой класс и исключение. Ни один из случаев исключения не объясняет мою ошибку.
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
public class Test extends AbstractTestNGSpringContextTests {
@Mock
Object1 o1;
@BeforeMethod
public void init() {
mockStatic(ClassToBeMocked.class);
PowerMockito.when(ClassToBeMocked.getMethod()).thenReturn("string");
}
Последняя строка кода вызывает это исключение org.mockito.exceptions.misusing.MissingMethodInvocationException: when () требует аргумента, который должен быть «вызовом метода в имитации». Например: когда (mock.getArticles ()). thenReturn (статьи);
Кроме того, эта ошибка может появиться по следующим причинам: 1. вы используете один из методов: final / private / equals () / hashCode (). Эти методы не может должны быть заглушены / проверены. Методы имитации, объявленные для закрытых родительских классов, не поддерживаются. 2. внутри when () вы вызываете метод не для имитации, а для какого-то другого объекта.




Не могли бы вы попробовать это:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
public class Test extends PowerMockTestCase {
@Mock
Object1 o1;
@ObjectFactory
public IObjectFactory getObjectFactory() {
return new org.powermock.modules.testng.PowerMockObjectFactory();
}
@BeforeMethod
public void init() {
mockStatic(ClassToBeMocked.class);
PowerMockito.when(ClassToBeMocked.getMethod()).thenReturn("string");
}
Я на самом деле борюсь с подобной проблемой, но я вижу что-то не так с вышеизложенным. Аннотации @RunWith являются частью библиотеки JUnit. AbstractTestNGSpringContextTests и @BeforeMethod являются частями библиотеки TestNG. Возможно, поэтому у вас возникают проблемы. Если кто-то не хочет противоречить этому утверждению, я считаю, что две библиотеки модульных тестов не работают друг с другом. По крайней мере, не так.
@RunWith (PowerMockRunner.class) не сможет подобрать @BeforeMethod, как если бы это был org.junit.Before.
Я столкнулся с той же проблемой. Вы когда-нибудь решали эту проблему?