JukitoRunner,绑定最后一类的模拟
问题描述:
如何绑定Jukito最终类的模拟?JukitoRunner,绑定最后一类的模拟
例如:
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?
答
如果你使用的Mockito 2.从Mockito 2 Wiki你可以嘲笑final类:
最终的类和方法的嘲讽是孵化,可选的功能。它使用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());