は私が行う方法です私のMVP。
私のプレゼンターが私のビューでゲッターを呼び出すのを覚えています私のビューは私のプレゼンターのメソッドを呼び出す必要があります。このように、ビジネスロジックはプレゼンタに分離され、ビューをモックすることなく簡単にテストできます。
public interface MyView extends View {
void setObjectsList(List<Object> objects);
void setPresenter(Presenter presenter);
interface Presenter {
void handleObjectSelected(Object object);
}
}
プレゼンターはMyView.Presenterを実装しています
class MyPresenter implements MyView.Presenter {
private final MyView myView;
private List<Object> objects;
public MyPresenter(MyView myView, List<Objects> objects) {
this.myView = myView;
this.objects = objects;
}
public void initialize() {
myView.setPresenter(this);
myView.setObjectsList(objects);
}
@Override
public void handleObjectSelected(Object object) {
// Do something with selected object.
}
}
例MYVIEW実装:リストボックスを使用してMYVIEWの
class MyViewImpl implements MyView {
private Presenter presenter;
...
@Override
public void setObjectsList(List<Object> objects) {
// Do something with object list.
}
@Override
public void setPresenter(Presenter presenter) {
this.presenter = presenter;
}
public void somethingHappened() {
presenter.handleObjectSelected(object);
}
}
第2の実施例:
class ListBoxMyViewImpl implements MyView {
@UiField ListBox listBox;
private Presenter presenter;
private List<Object> objects;
public MyListBoxView() {
objects = Lists.newArrayLists();
}
@Override
public void setObjectsList(List<Object> objects) {
this.objects = objects;
listBox.clear();
for (Object object : objects) {
listBox.addItem(object.toString());
}
}
@Override
public void setPresenter(Presenter presenter) {
this.presenter = presenter;
}
@UiHandler("listBox")
void onChange(ChangeEvent e) {
presenter.handleObjectSelected(objects.get(listBox.getSelectedIndex());
}
...
}
この方法で、あなたプレゼンターのロジックをテストするために視点を模擬する必要はありません。
の代わりに:
@Mock
MyView view;
List testValues = ...;
when(view.getValues().getValues()).thenReturn(testValues);
result = presenter.method(...);
assertTrue(result == expected);
あなたのプレゼンターのロジックをテストします:
List testValues = ...;
assertEquals(expected, presenter.method(testValues));