???????±????getModel() ?? getView() ???滹?????e?????????????Junit?????????
?????????????????????Mockito?????????????????Junit & Mockito??Java????????????????????????????????????????JVM??????Mockito????Android??????
???????????CreditCardPresenter д?????????? ???????????????Mockito?????з??? ??
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class CreditCardPresenterTest {
CreditCardPresenter creditCardPresenter;
@Mock
CreditCardContract.View creditCardView;
@Mock
CreditCardContract.Model creditCardModel;
List<CreditCard> creditCards;
@Before
public void setUp() throws Exception {
creditCardPresenter = new CreditCardPresenter();
creditCardPresenter.attachView(creditCardView);
creditCardPresenter.setModel(creditCardModel);
creditCards = new ArrayList<>();
}
public void testGetCreditCards() {
when(creditCardModel.getCreditCards()).thenReturn(Observable.create(new Observable.OnSubscribe<List<CreditCard>>() {
@Override
public void call(Subscriber<? super List<CreditCard>> subscriber) {
subscriber.onNext(creditCards);
subscriber.onCompleted();
}
}));
creditCardPresenter.getCreditCards();
verify(creditCardView).showCreditCards(creditCards);
verify(creditCardView).loadCompleted();
}
public void testGetCreditCardsOnError() {
final RuntimeException exception = new RuntimeException();
when(creditCardModel.getCreditCards()).thenReturn(Observable.create(new Observable.OnSubscribe<List<CreditCard>>() {
@Override
public void call(Subscriber<? super List<CreditCard>> subscriber) {
throw exception;
}
}));
creditCardPresenter.getCreditCards();
verify(creditCardView).showError(exception);
}
}
????????????????????д??????????????
???????????@Mock?????????mock?????????setUp?????????Mockito.mock()??????mock???????????????????????????????@RunWith(MockitoJUnitRunner.class)
????mock??????????????????????void????????????????з?????????????null??int ???????0??boolean???????false?????
?????????????????when(…).thenReturn(…)???mock?????????????????
????when(creditCardModel.getCreditCards()).thenReturn(Observable.create(new Observable.OnSubscribe<List<CreditCard>>() {
????@Override
????public void call(Subscriber<? super List<CreditCard>> subscriber) {
????subscriber.onNext(creditCards);
????subscriber.onCompleted();
????}
????}));
????????????????????????creditCardModel.getCreditCards()???????????
????Observable.create(new Observable.OnSubscribe<List<CreditCard>>() {
????@Override
????public void call(Subscriber<? super List<CreditCard>> subscriber) {
????subscriber.onNext(creditCards);
????subscriber.onCompleted();
????}
????})
?????????verify()??????У??????????????У?
????verify(creditCardView).showCreditCards(creditCards);
?????????????????? creditCardView.showCreditCards(creditCards)?????????????????????creditCards??????????????Ρ????????????????????????????
????verify()???к????????????????????????? verfy(creditCardView?? times(1)).showCreditCards(creditCards); У??????????Σ?times(1) ???????????????У?鷽???????????Ρ????????滻??nerver()??????????????????С?
???????Mockito?????????????????к?????÷??????????????
????Mockito????Щ???в????????????mock?????????final???????????????л???????????? SelfApplication.getContext() ???????????Application??????????????г????????????????????????JVM?????????Application??????????
????????????????Mockito?????PowerMock
???????????Mockito?????????mock?????????final?????????????PowerMock??mock??SelfApplication.getContext()???????????????????Application????
????PowerMockito.mockStatic(SelfApplication.class);
????PowerMockito.when(SelfApplication.getContext()).thenReturn(mock(SelfApplication.class));
????????????????????@PrepareForTest(SelfApplication.class)?? ???????????  @RunWith(PowerMockRunner.class) ?????????mock??
?????????? ????SelfApplication.getContext()???????????mock?????????????????when().thenReturn()?????????????????????
???????????Mockito ?? PowerMock ??????÷??????????????????????????????
????????????????????????????л??????????????????????д??????????????????д??????????????д?????????????????′????????????????????????????????????????????????????????????????ɡ?