@Test public void testQueryApi() throws Exception { // Context of the app under test. new QueryModelImpl().queryIp("8.8.8.8", new BasePresenterImpl.SubscriberEx<IpBean>() { @Override public void onSubscribeing(Subscription subscription) { subscription.request(Long.MAX_VALUE); }
@Override public void onNext(IpBean bean) { assertTrue(null != bean); }
@Override public void onError(Throwable e, boolean global) { super.onError(e, global); assertTrue(false); } }); }
然而...并没有什么卵用!断言根本不被执行...呵呵
仔细一想,嗯! testQueryApi() 应该是运行在主线程的,而我的 new QueryModelImpl().queryIp() 是异步的,也就是说 queryIp() 这个方法还没执行完(呵呵,可能初始化都还没走完),我们的主线程就已经死了,单元测试进程就 Game Over 了...自然是没法返回断言的数据了.
@Test public void testQueryApi() throws Exception { // Context of the app under test. final Object[] object = new Object[1]; new QueryModelImpl().queryIp("8.8.8.8", new BasePresenterImpl.SubscriberEx<IpBean>() { @Override public void onSubscribeing(Subscription subscription) { subscription.request(Long.MAX_VALUE); }
@Override public void onNext(IpBean bean) { object[0] = bean; }
@Override public void onError(Throwable e, boolean global) { super.onError(e, global); } }); Thread.sleep(10 * 1000); assertTrue(object[0] instanceof IpBean); }
@Test public void testQueryApi() throws Exception { // Context of the app under test. final Object[] object = new Object[1]; final CountDownLatch latch = new CountDownLatch(1); new QueryModelImpl().queryIp("8.8.8.8", new BasePresenterImpl.SubscriberEx<IpBean>() { @Override public void onSubscribeing(Subscription subscription) { subscription.request(Long.MAX_VALUE); }