KOK球盘体育
当前位置: KOK球盘体育 > 单元作文 >

如何优雅的写单元测试?

时间:2020-03-10 22:30来源:未知 作者:admin 点击:
KOK球盘体育

当前网址:http://www.wassei.com/danyuanzuowen/2020/0310/779.html

  越来越多的项目开始尝试写单元测试,关于单元测试的好处以及原理已经有很多资料了,这里不在做过多的讲述,本文主要介绍单元测试在模块化应用中的一些思考,以及如何优雅的写单元测试。

  单元测试最大的痛点就是代码耦合,比如直接持有第三方库的引用、不合理的跨层调用等等,除此之外,static method、new object、singleton 都是不利于测试的代码方式, 这就意味着需要 mock 大量的替身类,增加了测试成本,应该尽量避免,同时使用依赖注入的方式来代替。

  首先,在模块化应用中应该创建公共的单元测试模块,里面可以放一些公共的 BaseTest、Shadow Class、Utils、Junit rules 等等,在业务模块中直接 dependency 进来即可,提高写单元测试的效率。

  其次,明确需要测试的代码。刚开始的时候,可以只测中间逻辑层和工具类,这部分代码相对“干净”,易于测试,也是逻辑分支最集中的地方。

  最后,依赖注入来写单元测试。试想一下 mock 的类都能够自动完成注入,是不是很爽?这样能大大提高编写测试用例的速度,避免重复的 mock 替身类和静态方法,并提高测试代码的可读性。

  定义一个同样的 dependency 工厂,不同的是,该工厂生产的是测试所需要的 Shadow 替身,能够自动识别依赖关系,并实现自动注入!

  没错!前面提到的 DI 框架就是 Dagger2,为了降低风险并减少使用成本,选择了一个模块进行尝试,Dagger2 既能实现模块内的自动注入,又能向外提供注入能力,实现跨模块的注入。

  在 Dagger2 里,生产这些 dependency 的工厂叫做 Module ,然而使用者并不是直接向 Module 要 dependency,而是有一个专门的“工厂管理员”,负责接收使用者的要求,然后到 Module 里面去找到相应的 dependency 对象,最后提供给使用者。这个“工厂管理员”叫做 Component。基本上,这就是 Dagger2 里面最重要的两个概念。

  上图是 Dagger2 在模块之间的依赖关系,本文只介绍模块内的应用以及单元测试的实现。

  在 Frame 中可以享受到 LibComponent 中全局依赖的注入,只需要在页面初始化的时候完成注入即可。

  本文介绍了 Dagger2 在模块内以及单元测试中的应用,DI是一种很好的开发模式,即使不做单元测试,也会让我们的代码更加简洁、干净、解耦,只不过在单元测试中发挥出了更大的威力,让很多难测的代码测试起来更加容易。

  Android单元测试(六):使用dagger2来做依赖注入,以及在单元测试中的应用

  注:代码中的 //= 表示新加的、修改的等需要重点关注的代码Class#method表示一个类的instance...

  这是我在InfoQ组织的移动开发前线微信群里面做的一次分享,发到简书上面一份,希望给在简书有需要的读者也能提供一点...

  Google官方MVP+Dagger2架构详解【从零开始搭建android框架系列(6)】

  什么是单元测试 在计算机编程中,单元测试(Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最...

  单元测试小总结 ​ 单元测试往往在产品赶着上线的情况下被忽视。然后单元测试往往会节约大量修改bug的时间。还有一点...

------分隔线----------------------------