如何在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吗?
答案 0 :(得分:0)
如果你使用Mockito 2,你可以模拟最后一堂课。来自Mockito 2 Wiki:
最终类和方法的模拟是一种孵化,选择加入的功能。它使用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());