关于rxJava单元测试的一些疑问

yangTal09 2016-11-08 11:07:17
最近在学习单元测试,再看别人代码对rxJava进行单元测试时有一些问题想不通,想问问这里的大神。
首先先上代码:
public class UseCaseTest {

private UseCaseTestClass useCase;

@Mock private ThreadExecutor mockThreadExecutor;
@Mock private PostExecutionThread mockPostExecutionThread;

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
this.useCase = new UseCaseTestClass(mockThreadExecutor, mockPostExecutionThread);
}

@Test
@SuppressWarnings("unchecked")
public void testBuildUseCaseObservableReturnCorrectResult() {
TestSubscriber<Integer> testSubscriber = new TestSubscriber<>();
TestScheduler testScheduler = new TestScheduler();
given(mockPostExecutionThread.getScheduler()).willReturn(testScheduler);

useCase.execute(testSubscriber);

assertThat(testSubscriber.getOnNextEvents().size(), is(0));
}

@Test
public void testSubscriptionWhenExecutingUseCase() {
TestSubscriber<Integer> testSubscriber = new TestSubscriber<>();

useCase.execute(testSubscriber);
useCase.unsubscribe();

assertThat(testSubscriber.isUnsubscribed(), is(true));
}

private static class UseCaseTestClass extends UseCase {

protected UseCaseTestClass(
ThreadExecutor threadExecutor,
PostExecutionThread postExecutionThread) {
super(threadExecutor, postExecutionThread);
}

@Override protected Observable buildUseCaseObservable() {
return Observable.empty();
}

@Override public void execute(Subscriber UseCaseSubscriber) {
super.execute(UseCaseSubscriber);
}
}
}

这个是android-CleanArchitecture里面对useCase的单元测试,标红的地方是不太理解的:
1、测试的observable是empty()返回的,也就是说只会发送onCompleted()事件,因此assertThat(testSubscriber.getOnNextEvents().size(), is(0));我可以理解,但后来我测试了一下,将observable改成Observable.just(1,2,3),发现测试仍然通过....那么这样测试有什么意义呢?
2、UseCase的构造函数需要传入两个与线程相关的类,一个是ThreadExecutor ,另一个是PostExecutionThread ,这两个都由mockito mock出来了,那为什么只需要对PostExecutionThread进行特殊处理,使之由TestScheduler 代替?而且,我试着重写了TestSubscriber的onNext()方法,并没有执行。
所以我的猜想是,由于给observable配置的线程都是mock或者测试的,所以,实际上observable并没有将item发送出去,这也就是为什么不管observable是空还是just(1,2,3),assertThat(testSubscriber.getOnNextEvents().size(), is(0))通过,testSubscriber.assertCompleted();不通过的原因,那这样的话,搞这个单元测试到底有什么意义呢?而且我后来测试过了,即便不调用given(mockPostExecutionThread.getScheduler()).willReturn(testScheduler);测试仍然可以通过,那为啥还要这样写呢?
求大神赐教,不胜感激!
...全文
105 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
软件技术专业调研报告 为了更好地制定2018年软件技术专业培养方案,2018年上半年通过各类招聘网,对软件技术专业进行了市场调研,现将调研结果总结如下: 一、调研的目的 此次进行调研的主要目的是了解软件行业的人才需求目标,能力要求以及行业的工作过程,以此来修改人才培养方案和进行课程建设。 二、调研的主要方式 1.要想了解企业对人才的要求,最好的方式我认为就是看招聘启示,一个企业的硬性需求都写在招聘启示中了。所以我首先上网查询本行业相关的大型企业的招聘要求,了解行业所需的前沿知识。 2.由于计算机学科的特殊性,知识体系翻新速度非常快,了解整个行业的发展动态有助于我们制定我们的人才培养方案和课程建设,所以我又在网上查找行业的最新动态以确定我进行企业调研的方向。 3.利用自己的人际关系,与已经就业的学生进行聊天交流,借此向其了解有关本专业的专业计划的问题,了解企业中的工作流程。 三、调研的主要内容 1.软件行业的发展现状 软件专业调研报告全文共5页,当前为第1页。近年来,我国软件和信息技术服务业发展迅速,但产业规模和实力还不能满足国民经济和社会发展需要,依然存在一些制约产业发展的突出问题,具体表现在:缺乏具有全球领先地位的大企业,产业整体上处于价值链的中低端;产业创新体系不健全,核心技术缺乏;产业链协同效应尚未充分发挥,亟待建立龙头企业带动、中小企业支撑的产业发展格局;人才结构矛盾突出,高层次、复合型、领军型人才依然缺乏;以市场为导向、政产学研用结合的支撑体系有待完善,产业可持续发展能力亟需提升。 软件专业调研报告全文共5页,当前为第1页。 十三五时期,伴随信息通信技术的迅速发展和应用的不断深化,软件与网络深度耦合,软件与硬件、应用和服务紧密融合,软件和信息技术服务业加快向网络化、服务化、体系化和融合化方向演进。产业技术创新加速,商业模式变革方兴未艾,新兴应用层出不穷,将推动产业融合发展和转型升级。 中商情报网发布《战略》显示,目前全国软件业务收入排名前20位的城市,占据全行业近九成的业务收入,其中、、南京、济南等11个软件名城及创建城市,占全国软件收入的65%。软件产业也已成为这些城市的战略支柱产业。 2、软件行业的人才需求状况 我国软件业持续保持20%的增长速度,每年的软件人才需求缺口是40~100万人次。国家振兴规划中的和与软件行业紧密相关,的都包括了。毕业的学生满足了社会需求,具有广阔就业前景。该专业毕业生适合在IT领域、软件公司、各类企业和政府机关、科研单位从事软件开发、软件测试、网页设计、数据库维护、客户端编程等工作。 3、岗位(岗位群)调查 1)Java Web程序员 职位描述: WEB应用程序代码编写; 模块代码测试及优化; 软件专业调研报告全文共5页,当前为第2页。3、编写单元测试文档。 软件专业调研报告全文共5页,当前为第2页。 岗位要求: 精通java基础,及常用java设计模式,深入理解MVC编程模式,了解UML相关知识。 掌握struts、spring、hibernate等主流java开源框架技术。 熟练掌握WEB应用程序设计相关的jsp、javascript、ajax、css、html等技术。 熟悉DB2、ORCALE、MS SQL SERVER数据库其中一种; 5、有较强的新技术学习能力,和良好的沟通能力和理解能力。 2)Android程序员 职位描述: 1、负责Android平台下的APP应用开发; 2、能根据需求开发应用程序,完成模块设计、编码、测试、维护、文档编写工作; 根据开发过程中的体验对产品提出改进意见。 岗位要求: 1、精通Java语言; 2、熟悉面向对象开发与设计,精通常用数据结构与算法,熟悉软件设计模式; 4、熟悉Android应用开发框架、SDK及常用调测方法; 5、熟悉Android UI界面常用组件、常用布局方法、事件处理机制; 6、熟悉Android多线程设计、网络编程、数据存储与IO、多媒体开发; 7、熟悉Android端WebSocket开发,并且熟练使用OkHttp框架; 软件专业调研报告全文共5页,当前为第3页。8、熟练掌握Android,RxJava,MVP架构设计; 软件专业调研报告全文共5页,当前为第3页。 9、熟悉了解Android下NDK编程和JNI使用; 10、吃苦耐劳、责任心强、做事积极主动、有团队合作精神;逻辑思维严谨、关注新技术,有持续学习能力。 3)java实施运维工程师 职位描述: 1、在项目经理的领导下,配合项目工作; 2、负责信息系统的安装及日常运维,包括接听客户咨询电话,向用户提供咨询、指导、解释相关业务或技术问题,收集并及时反馈用户信息; 3、负责用户培训,编写培训文档、使用手册、测试文档,解答用户系统使用过程中的疑问; 4、完成项目经理交

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧