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());
Другие вопросы по тегам