???????卤????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 ??????梅??????????????????????????????
????????????????????????????谢??????????????????????写??????????????????写??????????????写?????????????????鈥�????????????????????????????????????????????????????????????????伞?