Head First: Android???????????
?????Github ???????[ 2016/12/9 13:41:40 ] ??????????????? Android
???????卤????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 ??????梅??????????????????????????????
????????????????????????????谢??????????????????????写??????????????????写??????????????写?????????????????鈥�????????????????????????????????????????????????????????????????伞?
???????????????????????婕�???????????????????SPASVO小??(021-61079698-8054)?????????????????????????
??????
iOS???????mocha??chai??sinon??istanbul???????????????????????????????????????写?????Java????????7??????Android?????????Robolectric3.0????(?)???Kiwi?????????????????????????????????Python?????????????????????????????????????Controller????????写?????????10???????????????????Angular????????????Component??Directive??Pipe ???ServiceAndroid????????????????????????????????--Mockito??????iOS UnitTest???????Vue?????????????????

???路???
??????????????????
2023/3/23 14:23:39???写?貌??????????
2023/3/22 16:17:39????????????????????些??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???路???????路
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11????????
?????????App Bug???????????????????????Jmeter?????????QC??????APP????????????????app?????械????????jenkins+testng+ant+webdriver??????????????JMeter????HTTP???????Selenium 2.0 WebDriver ??????