私のクラスでonFailure
メソッドをテストし、post
メソッドがBUS
インスタンスで呼び出されたかどうかを検出したいと思います。プライベート静的最終フィールドのメソッドがmockitoで呼び出されたかどうかを検出
私は一日中試してきましたが、私は達成できませんでした。私はジュニアとpowermockとMockitoを使用します。
ApiCallback.java:
package com.example.android.webserver;
import com.example.android.event.OnApiRequestErrorEvent;
import com.example.android.event.OnApiResponseErrorEvent;
import com.example.android.model.ApiRequestError;
import com.example.android.utils.BusProvider;
import com.example.android.utils.ErrorUtils;
import org.greenrobot.eventbus.EventBus;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public abstract class ApiCallback<T> implements Callback<T> {
private final static EventBus BUS;
static {
BUS = BusProvider.getInstance();
}
@Override
public void onFailure(Call<T> call, Throwable t) {
BusProvider.getInstance().post(new OnApiRequestErrorEvent(new ApiRequestError(t.getMessage())));
}
protected void handleResponse(Response<?> response, Object object) {
if (response.isSuccessful()) {
BusProvider.getInstance().post(object);
} else {
BUS.post(new OnApiResponseErrorEvent(ErrorUtils.parseError(response), object));
}
}
}
私のテストクラス - ApiCallbackTest.java:一般的に
package com.ashojash.android.webserver;
import com.ashojash.android.utils.BusProvider;
import org.greenrobot.eventbus.EventBus;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.powermock.api.mockito.PowerMockito;
import static org.mockito.Mockito.verify;
import static org.powermock.api.mockito.PowerMockito.*;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
import retrofit2.Call;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.doCallRealMethod;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
@RunWith(PowerMockRunner.class)
@PrepareForTest({BusProvider.class})
public class ApiCallbackTest {
@Mock
private ApiCallback apiCallback;
@Mock
private Call call;
@Mock
private Throwable throwable;
@Before
public void setUp() {
}
@Test
public void should_call_busProvider_to_post_event() throws Exception {
// given
doCallRealMethod().when(apiCallback).onFailure(any(Call.class), any(Throwable.class));
doCallRealMethod().when(BusProvider.getInstance());
// when
apiCallback.onFailure(call, throwable);
// then
EventBus bus = BusProvider.getInstace();
verify(bus).post(anyObject());
}
}
以下の回答はどれですか? –