3

这是我的问题:

我有一个方法叫做desactiveNavLinks使我的sideBarContainer(HTMLPanel)中的所有小部件都失效,这个方法非常有效。所以这是我的 uiBinder XML 的代码:

MainSideBarImpl.ui.xml :

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">
<ui:style>
.centerDiv {
    text-align: center;
}

.logo {
    height: 15%;
    width: 15%;
}

.logoName {
    width: 65%;
}
</ui:style>
<g:HTMLPanel>
    <div class="sidebar-nav">

        <div class="{style.centerDiv}">
            <b:Image url="GA/img/img1.png" styleName="{style.logoName}"></b:Image>
        </div>
        <div class="sidebar-avatar big">
            <b:Image ui:field="userPic"></b:Image>
        </div>
        <g:HTMLPanel ui:field="sideBarContainer">

            <nav id="sidebar" class="sidebar nav-collapse collapse">
                <ul id="side-nav" class="side-nav">

                    <b:NavLink icon="HOME" ui:field="homeNavLink">Clients</b:NavLink>

                    <li class="panel">
                        <b:AccordionGroup heading="Client" ui:field="accordionGrp">
                        </b:AccordionGroup>
                    </li>
                    <li>
                        <b:base.IconAnchor icon="EDIT" ui:field="benchNavLink">Benchmark</b:base.IconAnchor>
                    </li>
                    <li>
                        <a class="nav-header can-active">
                            <i class="icon-star"></i>
                            Favoris
                        </a>
                    </li>
                </ul>
            </nav>
        </g:HTMLPanel>


    </div><!-- sidebar -->
</g:HTMLPanel>

我想在 MainSideBarImpl.java 中测试的方法:

public void desactiveNavLinks() {
    //sideBarContainer is a HTMLPanel declared in the same Classe with @UiField annotation.
    for(int i = 0;i<sideBarContainer.getWidgetCount();i++){
        if(sideBarContainer.getWidget(i).getStyleName().contains("active")){
            sideBarContainer.getWidget(i).removeStyleName("active");
            sideBarContainer.getWidget(i).getParent().removeStyleName("active");
        }
    }
    for(SiteNavLinkEditor w : sitesEditor.getEditors()){
        w.setActive(false);
    }

}

这是我的单元测试方法:

@RunWith(GwtMockitoTestRunner.class)
public class MainSideBarTest{
    @GwtMock
    private HTMLPanel sideBarContainer;
    private MainSideBarImpl widget;

    @Before
    public void setUp(){
        widget = new MainSideBarImpl();
    }

    @Test
    public void testDesactiveNavLinks(){
        System.out.println("Widgets count = "+sideBarContainer.getWidgetCount()); //That is printing 0 and should print all the widgets inside of the HTMLPanel
        widget.desactiveNavLinks();
    }
}

看起来这个类没有用 UiBinder 进程实例化,所以我的问题是:

有没有办法仅使用 JUnit 测试 UiBinder 小部件,或者唯一的方法是使用 GwtTestCase 测试?

4

1 回答 1

1

是的,您必须使用GwtTestCase. 这是因为您想要检查 UiBinder 创建的 DOM。如果您只想测试绑定到 UiBinder 模板的 Java 类中定义的行为,那么 JUnit + gwtmockito 就足够了。

于 2014-11-27T08:07:21.407 回答