JukitoRunner, связывай макет финального класса
Как связать макет выпускного класса в Jukito?
Например:
public final class SomeFinalClass(){
public SomeFinalClass(String someString){
}
}
// Тестовый класс
@Runwith(JukitoRunner.class)
public class TestingClass(){
@Inject
private SomeFinalClass someFinalClassMock;
public static class TestModule extends JukitoModule {
@Override
protected void configureTest() {
// bind(SomeClient.class).in(TestSingleton.class);
}
@Provides
public SomeFinalClass getSomkeFinalClass() {
return Mokito.mock(SomeFinalClass.class); //throws error
}
}
}
Есть ли способ, которым я могу использовать PowerMockito с JukitoRunner?
1 ответ
Вы можете издеваться над последним классом, если вы используете Mockito 2. Из Вики Mockito 2:
Насмешка над финальными уроками и методами - инкубационная функция. Он использует комбинацию инструментария агента Java и подклассов для обеспечения возможности переноса этих типов. Поскольку это работает иначе, чем наш текущий механизм, и у этого есть другие ограничения, и поскольку мы хотим собрать опыт и отзывы пользователей, эта функция должна была быть явно активирована, чтобы быть доступной; это можно сделать с помощью механизма расширения mockito, создав файл src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
содержащий одну строку: mock-maker-inline
,
После того, как вы создали этот файл, Mockito автоматически использует этот новый движок, и можно сделать:
final class FinalClass {
final String finalMethod() { return "something"; }
}
FinalClass concrete = new FinalClass();
FinalClass mock = mock(FinalClass.class);
given(mock.finalMethod()).willReturn("not anymore");
assertThat(mock.finalMethod()).isNotEqualTo(concrete.finalMethod());