美文网首页
如何做好单元测试

如何做好单元测试

作者: 薛云龙 | 来源:发表于2019-01-10 20:50 被阅读25次

    在讨论这个问题之前,我们可以先试图看一下阿里巴巴开发手册中的单元测试规范。从中能看到很多强制的规则,可见单元测试的规范对于一个项目的重要性。

    为什么要做单元测试?

    1. 通过单元测试,开发者能做到心中有数,知道我们的代码在大体逻辑上是没有bug的。如果开发者尚且不知道自己写的程序有没有问题,那么就没必要交由测试人员测试,这样必然会浪费双方大量的时间。
    2. 通过单元测试,我们可以尽可能的保证项目质量。这里质量不仅当下的项目稳定性,对于项目后续的迭代都会有一个良好的支持。
    3. 单元测试其实对于新人来说是入手项目的最佳利器。可能我们维护了一大堆的wiki文档,讲的什么详细。但是正如Linus Torvalds所说那样,Talk is cheap , show me the code。只有我们能真正跑一遍代码,一步一步debug程序,我们才能保证我们对这段代码逻辑的理解。(当然这不是给你不写文档的借口)
    4. 想要在测试面前昂首挺胸的走过吗?没错,写的一手好的单元测试,装的一手好13。

    好的单元测试有哪些特点?

    1. 非人工校验:好的单元测试必然是需要通过自动化方式执行的,千万不要通过打印日志的方式来人眼判断对错。
    2. 独立测试:我们要让测试类是独立,即尽量不要依赖第三方存储或者数据。我们需要对数据存储(redis,mysql等)进行mock。并且将预先需要的数据造好,放到测试resource中,待测试程序运行时先行导入。这样才能保证即使我们项目环境发生了变化,这些单元测试同样是能够执行的;同样,我们的测试类应该能够给任何人的时候都能运行,而不能出现“只能在我的机器上运行”这种情况。
    3. 单一测试:一个测试类只测试一个功能,一个测试方法只测试一个方法。要满足单一原则。这样的做法能够保证单测出问题时直接确定问题所在。
    4. 更新和迭代:对于有代码更新时,我们要做好单元测试的及时更新,千万不要放一堆不能跑的测试用例在那里。
    5. 适当的重构:被测的代码要有可测试性,适当的重构将会让我们的测试更加容易。

    常用单元测试mock方法

    mock 代码逻辑:通过mock内部方法,我们可以设定一些方法的特定返回值,这样才能满足我们想要测试的条件了。比如我们常用的mock框架就有powermock等等。这些自行网上查阅。

    mock redis:https://github.com/50onRed/mock-jedis

    mock mysql : 在Spring环境下,我们通过H2数据库mock DataSource。当然,我们需要将建表sql和数据sql写入到H2数据中。另外我们需要注意的是H2数据并不支持事物,如果需要对事物进行测试的话,就用不了这种方式了。

    @Configuration
    public class TestingDataSourceConfig {
    
        @Bean
        @Primary
        public DataSource dataSource() {
            return new EmbeddedDatabaseBuilder()
                .generateUniqueName(true)
                .setType(H2)
                .setScriptEncoding("UTF-8")
                .ignoreFailedDrops(true)
                .addScript("schema.sql")
                .addScripts("user_data.sql", "country_data.sql")
                .build();
        }
    }
    

    相关文章

      网友评论

          本文标题:如何做好单元测试

          本文链接:https://www.haomeiwen.com/subject/awhnrqtx.html