代码的测试

2021-01-19  本文已影响0人  _1633_

1. 什么是代码的可测试性?

    粗略地讲,所谓代码的可测试性,就是针对代码编写单元测试的难易程度。对于一段代码,如果很难为其编写单元测试,或者单元测试写起来很费劲,需要依靠单元测试框架中很高级的特性,那往往就意味着代码设计得不够合理,代码的可测试性不好。

    2. 编写可测试性代码的最有效手段

        依赖注入是编写可测试性代码的最有效手段。通过依赖注入,我们在编写单元测试的时候,可以通过 mock 的方法解依赖外部服务,这也是我们在编写单元测试的过程中最有技术挑战的地方。

    3. 常见的 Anti-Patterns

        常见的测试不友好的代码有下面这 5 种:

            1 代码中包含未决行为逻辑

                所谓的未决行为逻辑就是,代码的输出是随机或者说不确定的,比如,跟时间、随机数有关的代码。我们一般的处理方式是将这种未决行为逻辑重新封装。针对 Transaction 类,我们只需要将交易是否过期的逻辑,封装到 isExpired() 函数中即可。

                也就是说将这些 变化的不确定因素 抽象出来,放入函数 或者配置项中,这就是我们说的 开闭原则,减少 测试代码的 依赖性 和 业务的具体逻辑,留下来的都是 抽象的逻辑代码,不涉及业务 具体数据。

            2 滥用可变全局变量

            3 滥用静态方法

            4 使用复杂的继承关系

            5 高度耦合的代码

                如果一个类职责很重,需要依赖十几个外部对象才能完成工作,代码高度耦合,那我们在编写单元测试的时候,可能需要 mock 这十几个依赖的对象。不管是从代码设计的角度来说,还是从编写单元测试的角度来说,这都是不合理的。

上一篇下一篇

猜你喜欢

热点阅读