JukitoRunner,绑定最终类的模拟

时间:2017-02-20 19:14:30

标签: mockito guice jukito

如何在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
     }
  }
 }

我可以通过JukitoRunner使用PowerMockito吗?

1 个答案:

答案 0 :(得分:0)

如果你使用Mockito 2,你可以模拟最后一堂课。来自Mockito 2 Wiki

最终类和方法的模拟是一种孵化,选择加入的功能。它使用Java代理程序检测和子类化的组合,以实现这些类型的可模拟性。由于这与我们当前的机制不同,并且这个机制具有不同的限制,并且由于我们希望收集经验和用户反馈,因此必须明确激活此功能以使其可用;可以通过mockito扩展机制创建包含单行的文件src/test/resources/mockito-extensions/org.mockito.plugins.MockMakermock-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());