Here is a simple example that I'm working on. Input would be appreciated.
I'm sure there are different approaches, but I'm having trouble finding one
and having a particular issue with the level of granularity of testing.
I know one answer, in advance, will be to not use GWTTestCase. I will heed
that. But the example below represents a simpler situation where
GWTTestCase will likely be needed. So, how would one do this with
GWTTestCase (assuming the actual case I'll be testing for is a good
candidate for GWTTestCase)?
I have a basic search form. It has fields on it like: first name, last
name, etc. There is also a Find button. When the Find button is pressed,
a list of people matching the criteria appear. Each row in the list
(CellTable) has person's name, date of birth, address, etc. Many items
are links (Hyperlinks). For example, the person's name is a Hyperlink
that, when clicked, goes to a new screen showing the person details. Basic
CRUD stuff.
There is a presenter, defined by the view.
public interface PersonSearchView extends IsWidget
{
public void setPresenter( Presenter listener );
public void setData( Vector<PersonSearchInfo> psinfos );
...
public interface Presenter
{
/**
* Find people that match certain criteria.
*
* @return
*/
void findPersons( String firstname, String lastname, int sortBy,
int start, int cnt );
/**
* Navigate to a new Place in the browser.
*/
void goTo( Place place );
}
}
The PersonSearchActivity implements the Presenter.
public class PersonSearchActivity extends AbstractActivity implements
PersonSearchView.Presenter
{
...
public void findPersons( String firstname, String lastname, int sortBy,
int start, int cnt )
{
MyServiceAsync srv = GWT.create( MyService.class );
PersonSearchCallback personSearchCallback = new
PersonSearchCallback ();
srv .findPersons( firstname, lastname, sortBy, start, cnt,
personSearchCallback );
}
private class PersonSearchCallback extends
AsyncCallback<Vector<PersonSearchInfo>>
{
public void onFail( Throwable caught )
{
caught.printStackTrace();
}
public void onSuccess( Vector<PersonSearchInfo> results )
{
clientFactory.getPersonSearchView().setData( results );
}
}
}
The PersonSearchViewImpl has a bunch of test fields on it (firstname,
lastname, find button, etc) and calls the activities method to actually do
work.
public class PersonSearchViewImpl extends ResizeComposite implements
PersonSearchView
{
interface Binder extends UiBinder<Widget, PersonSearchViewImpl>
{
}
private static final Binder binder = GWT.create( Binder.class );
@UiField TextBox firstname;
@UiField TextBox lastname;
@UiField Button findButton;
/**
* Handle Search button - do the search.
*/
@UiHandler( "findButton" )
protected void onFindButtonClick( ClickEvent event )
{
...
listener.findPersons( firstname, lastname, sortby, start, cnt );
...
}
}
A couple of questions regarding a test I'd like to perform. Let's assume
that testing occurs with a live database (and GWT-RPC). I know that
contest of the database and what should be returned for certain queries.
I'd like to run tests that execute certain queries and make sure they
appear in the table (at certain positions).
1) How would I test the clicking within the results. For example, each
person's name appears (per row) as a Hyperlink in the results. This is
implemented in a CellTable with Hyperlinks. Normal behavior is that when
the Hyperlink is clicked, GWT goes to the new place. There is no
notification to the activity. I suppose a ClickHandler could be added, but
it would have no usefulness other than testing. Would it be better to not
use a Hyperlink (maybe a Label with a click handler) and add a
selectPerson() method to the Presenter. Then the activity could test the
selection and handle the advancing to the new Place?
2) I've seen a technique where a Display interface is created within the
Presenter. It contains a list of HasText and HasClickHandlers that
conceptually define the View. It seems pretty fine grained. Of course,
this has the same issue related to Hyperlinks.
Anway, I'd appreciate feedback on various approaches.
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/google-web-toolkit/-/EW14INAHCXIJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.