2014-11-26 5 views
2

Вот моя проблема:Возможно ли протестировать метод, который использует элементы uiBinder XML с JUnit?

У меня есть метод, называемый desactiveNavLinks, что desactive все виджеты в моем sideBarContainer (HTMLPanel), этот метод работает perfecly. Так вот код моего 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, поэтому мой вопрос:

Есть ли способ проверить UiBinder виджеты только с JUnit или единственным способом является использование тестов GWTTestCase?

ответ

1

Да, вы должны использовать GwtTestCase. Это связано с тем, что вы хотите проверить DOM, создаваемый UiBinder. Если вы просто хотите проверить поведение, определенное в классе Java, связанное с шаблоном UiBinder, тогда достаточно JUnit + gwtmockito.

+0

Я не ставил его в свой вопрос, но я использую его. Я обновлю его. Я думаю, что мне нужно запустить тесты Gwt TestCase, если я хочу, чтобы мой виджет получал все дочерние элементы alll из uiBinder Xml, но мне нужно подтверждение, которое невозможно с помощью тестов JUnit. – Pintouch

+0

Oohhhh, ОК. Итак, вы хотите * на самом деле узнать количество детей на боковой панели, как определено в UiBinder? Не проверить, применяется ли стиль и т. Д.? –

+0

Я зарегистрировал его, и он печатает нуль. Кажется, что процесс инициализации uiBinder не выполняется с помощью тестов JUnit ... – Pintouch