私は試していますMVPパターンはTDDです。モチトを使った単体テスト - 抽象的なモックを作る、voidメソッド
私はユニットテストにこのようなプレゼンターロジックしようとしています表示し、プレゼンター
契約クラス
interface GithubContract {
interface View {
void displayUsers(List<GurkhaComboDTO> userList);
}
interface Model {
void getUsersAndPromptPresenter(String userName, Presenter presenter);
}
interface Presenter {
void searchUsers(String userName);
void loadUsers(List<GithubUserDTO> userList);
}
}
、モデルに対して次の契約を持っている:
をテストクラス
@RunWith(MockitoJUnitRunner.class)
public class GithubPresenterWithMockitoTest {
@Mock
GithubContract.Model mockedModel;
@Test
public void shouldDisplayUsersToScreen() {
//given
final GithubContract.View view = new MockView(); // I have created the mock myself for the view this time.
final GithubContract.Presenter presenter = new GithubPresenter(view, mockedModel);
***********************************************************
// I do not know what to write here
****************************************************
presenter.searchUsers("");
Assert.assertEquals(true, ((MockView) (view)).enoughItems);
}
}
マイMockView/VIEWクラスは次のようになります。
これは - >契約のモッククラス
class MockView implements GithubContract.View {
boolean enoughItems = false;
@Override
public void displayUsers(List<GurkhaComboDTO> userList) {
enoughItems = true;
}
}
マイPRESENTER実装はこのようなものです。 。
これがある - 私はこのようなMODELクラスの実装持って>実際のクラス
class GithubPresenter implements GithubContract.Presenter {
private GithubContract.View view;
private GithubContract.Model model;
GithubPresenter(GithubContract.View view, GithubContract.Model model) {
this.view = view;
this.model = model;
}
@Override
public void searchUsers(String userName) {
model.getUsersAndPromptPresenter(userName, this);
}
@Override
public void loadUsers(List<GithubUserDTO> data) {
if (data != null) {
if (!data.isEmpty()) {
view.displayUsers(users);
}
}
}
: - >実際のクラス今
public class GithubModel implements Model {
@Inject
GithubAPIService apiService;
private Call<GithubUserListDTO> userListCall;
private Context context;
GithubModel(Context context) {
this.context = context;
apiService = Util.getAPIService(); // I am using dagger, retrofit and okhttp3 with GSON to get Objects directly from network call
}
@Override
public void getUsersAndPromptPresenter(final String userName, final GithubContract.Presenter presenter) {
userListCall = apiService.searchGitHubUsers(userName);
if(Util.isInternetConnected(context)) {
userListCall.enqueue(new Callback<GithubUserListDTO>() {
@Override
public void onResponse(Call<GithubUserListDTO> call, Response<GithubUserListDTO> response) {
try {
presenter.loadUsers(response.body().getList());
} catch (Exception ignored) {
Util.log(ignored.getMessage());
}
}
@Override
public void onFailure(Call<GithubUserListDTO> call, Throwable t) {
}
});
}else {
Util.log("No Internet");
}
}
}
本当
これです問題部分:
私はGithubContract.Modelのモックで自分自身をテストすることに成功しましたが、私はモデルをモックするためにMockitoを使用したいと思いますが、getUsersAndPromptPresenter()メソッドは抽象メソッドであり、voidを返し、パラメータを取得し、メソッド内のInnerクラス
モデルを模擬するにはどうすればよいですか?テスト可能にするためにアーキテクチャーを変更する必要がある場合は、それを提案してください。