Java 为什么GoogleGuice不能初始化i18n对象并给我空值
我正在为我的方法编写一个J单元测试用例 A.javaJava 为什么GoogleGuice不能初始化i18n对象并给我空值,java,guice,Java,Guice,我正在为我的方法编写一个J单元测试用例 A.java void resetToolbar(final ListSelectionModel lastSelectionModel) { // attempt to restore the previous page if (toolbar != null && lastSelectionModel != null) { gridPanel.setSelectionModel(
void resetToolbar(final ListSelectionModel lastSelectionModel) {
// attempt to restore the previous page
if (toolbar != null && lastSelectionModel != null) {
gridPanel.setSelectionModel(lastSelectionModel);
}
// Issue occur here..... In PagingToolbar.
toolbar = new PagingToolbar();
}
PagingToolbar.java
class PagingToolbar {
@Inject
private transient I18nUtils i18n;
/**
* Creates a new paging toolbar.
*/
public PagingToolbar() {
super();
setDisplayingItemsText(i18n.getText(this, "facebook"));
// here i18n get null and throws null pointer-exception.
}
ATest.java
class editorModule extends AbstractModule {
@Override
protected void configure() {
bind(I18nUtils.class)
.to((Class < ? extends I18nUtils >) A.class);
}
}
@Test(groups = { "unit" })
public class ATest extends AbstractModule {
@Test
public void resetToolbar(){
I18nUtils i18n = createNiceMock(I18nUtils.class);
Injector injector = Guice.createInjector(new editorModule());
A editor = injector.getInstance(A.class);
// Invoke
A tt = new A();
tt.resetToolbar(listselectmodelMock);
}
}
class editorModule扩展了AbstractModule{
@凌驾
受保护的void configure(){
绑定(I18nUtils.class)
.至((类别<?扩展I18nUtils>)A.类别);
}
}
@测试(组={“单元”})
公共类ATest扩展了AbstractModule{
@试验
公共无效重置工具栏(){
I18nUtils i18n=createNiceMock(I18nUtils.class);
Injector=Guice.createInjector(新编辑器模块());
编辑器=injector.getInstance(A.class);
//援引
A tt=新的A();
tt.resetToolbar(listselectmodelMock);
}
}
注意:在resetToolbar()中的一个类中,我必须使用new关键字调用pagingToolbar。因为您正在使用
new pagingToolbar()自己创建pagingToolbar
代码>使用提供者
在您的A.java
中:
class A {
private final Provider<PagingToolbar> pagingToolbarProvider;
private PagingToolbar toolbar;
@Inject
A(Provider<PagingToolbar> pagingToolbarProvider) {
this.pagingToolbarProvider = pagingToolbarProvider;
this.toolbar = pagingToolbarProvider.get();
}
void resetToolbar(final ListSelectionModel lastSelectionModel) {
// attempt to restore the previous page
if (toolbar != null && lastSelectionModel != null) {
gridPanel.setSelectionModel(lastSelectionModel);
}
toolbar = pagingToolbarProvider.get();
}
}
A类{
私人最终提供商pagingToolbarProvider;
专用分页工具栏;
@注入
A(提供程序pagingToolbarProvider){
this.pagingToolbarProvider=pagingToolbarProvider;
this.toolbar=pagingToolbarProvider.get();
}
无效重置工具栏(最终列表SelectionModel lastSelectionModel){
//尝试还原上一页
如果(工具栏!=null&&lastSelectionModel!=null){
gridPanel.setSelectionModel(lastSelectionModel);
}
toolbar=pagingToolbarProvider.get();
}
}
是的,您是对的,但我无法重构代码,因为代码只有几行。是否有任何方法可以在测试类中配置()绑定并从中调用,以便它像Google Guice injector Worked一样持续调用,同时运行应用程序i18n获取正确的数据,而不给我null和resetToolbar工作正常。但对于测试来说,它无法获取正确的数据。如果代码相同,它甚至无法在生产环境中工作。toolbar=newpagingtoolbar()代码>。PagingToolbar
必须通过Injector#getInstance
方法注入或获取。