Для тестирования на стороне сервера (RPC-сервисы) вы можете использовать любую фальшивую среду, какую пожелаете.библиотека spring-test может быть полезна для насмешки над HttpRequest, HttpSession и другими классами API сервлетов.Тем не менее, у вас могут возникнуть проблемы с тестированием классов, расширяющих RemoteServiceServlet, так как они требуют правильно закодированного запроса.Вот интересный проект, который решает эту проблему:
http://www.gdevelop.com/w/blog/2010/01/10/testing-gwt-rpc-services/
Когда дело доходит до тестирования клиентского GWT-кода (часть, которая скомпилирована в Java Script), вы можете расширить GWTTestCase.Однако из-за ограниченной эмуляции библиотеки JRE, в частности, из-за отсутствия API отражения, было бы невозможно использовать какую-либо среду разработки.Более того, время выполнения GWTTestCase очень медленное, и по этой причине его считают базой для интеграционного тестирования, а не модульного тестирования.
Возможно создание модульных тестов для кода клиента GWT, если приложение GWT следует Model View Presenter.шаблон.Предполагая, что мы тестируем так называемую «Presenter» (логику), мы можем смоделировать так называемый «Display» с помощью любой моделирующей среды.Вот пример модульного теста с использованием Mockito:
import static org.mockito.BDDMockito.*;
import org.junit.Test;
import com.google.gwt.user.client.ui.HasText;
public class ResultPresenterTest {
@Test
public void shouldSetItWorksResultText() {
// given
ResultPresenter.Display display = mock(ResultPresenter.Display.class);
MockButton button = new MockButton();
HasText label = mock(HasText.class);
given(display.getShowResultButton()).willReturn(button);
given(display.getResultLabel()).willReturn(label);
ResultPresenter presenter = new ResultPresenter();
presenter.bind(display);
// when
button.click();
// then
verify(label).setText("It works");
}
}
Вот докладчик:
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.ui.HasText;
public class ResultPresenter {
private Display display;
public interface Display {
HasClickHandlers getShowResultButton();
HasText getResultLabel();
}
public void bind(final Display display) {
this.display = display;
display.getShowResultButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showResult();
}
});
}
public void showResult() {
display.getResultLabel().setText("It works");
}
}
А вот небольшой вспомогательный класс:
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
public class MockButton implements HasClickHandlers {
private HandlerManager handlerManager = new HandlerManager(this);
public void click() {
handlerManager.fireEvent(new ClickEvent() {
});
}
@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
return handlerManager.addHandler(ClickEvent.getType(), handler);
}
@Override
public void fireEvent(GwtEvent<?> event) {
handlerManager.fireEvent(event);
}
}
Это сделаетимеет смысл вызывать Presenter.showResult () в разделе «когда» вместо button.click (), однако, как вы можете видеть, также возможно издеваться над распространением событий.
Google GIN может быть очень полезным, так как это позволяетсвязывать разные экземпляры в зависимости от среды выполнения / тестового контекста.В тесте не GWTTestCase Presenter GIN можно заменить на Guice.
Также может быть очень полезен com.google.gwt.junit.GWTMockUtilities.