是否可以测试使用带有JUnit的uiBinder XML元素的方法?

时间:2014-11-26 16:01:58

标签: java unit-testing gwt uibinder gwtmockito

这是我的问题:

我有一个名为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);
    }

}

这是我的UnitTest方法:

@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测试?

1 个答案:

答案 0 :(得分:1)

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