为什么Google Guice无法初始化i18n对象并给我空值

问题描述 投票:0回答:2

我正在为我的方法编写J单元测试用例。

A.java

 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);
    }
}

注意:在resetToolbar()的类中,我必须使用new关键字调用pageingToolbar。

java guice
2个回答
0
投票

因为您正在用PagingToolbar自己创建new PagingToolbar();


0
投票

使用Provider

在您的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();
  }

}
© www.soinside.com 2019 - 2024. All rights reserved.