zoukankan      html  css  js  c++  java
  • go 单元测试框架介绍

    最近项目在补充单元测试,这里介绍以下几个go里流行的单元测试框架。

    gomock 

    gostub

    monkey

    Convey

    下面介绍下各个框架的主要用途

    convey 主要用途是用来组织测试用例的

    gomock 主要用来给接口打桩的。mockgen可以生成对应的接口测试文件。

    gostub 主要用来给变量、函数、过程打桩 但是给函数打桩时,需要做侵入式修改

    monkey 主要也是用来给变量、函数打桩的

    gostub打桩的原理式通过反射,所以要求调用stub函数传入第一个参数必须是指针,然而函数并没有指针的概念,所以需要对函数做侵入式修改。

    monkey打桩的原理则是在运行时通过汇编语句重写可执行文件,将待打桩函数或方法的实现跳转到桩实现,原理和热补丁类似。但是moneky不是线程安全的,不能用在并发测试中

    对于以上几个框架,简书上有大神已经做了详细介绍了

    下面给出链接

    convey

    https://www.jianshu.com/p/e3b2b1194830

    gomock

    https://www.jianshu.com/p/f4e773a1b11f

    monkey

     https://www.jianshu.com/p/2f675d5e334e

    gostub

    https://www.jianshu.com/p/70a93a9ed186

    这里简单提一下convey

    一般都是convey+monkey或者convey+gostub结合使用

    package tests
    
    import (
        "errors"
        . "github.com/smartystreets/goconvey/convey"
        "testing"
    )
    
    func Func(arg string) error {
        if len(arg) > 0 {
            return nil
        } else {
            return errors.New("arg is nil")
        }
    }
    
    func TestFunc(t *testing.T) {
        Convey("test Func", t, func() {
            Convey("Func should return nil when arg is not empty", func() {
                arg := "1"
                err := Func(arg)
                So(err, ShouldBeNil)
            })
            Convey("Func should return error when arg is empty", func() {
                arg := ""
                exceptErr := errors.New("arg is nil")
                err := Func(arg)
                So(err, ShouldBeError, exceptErr)
            })
        })
    }

    主要使用了两个函数Convey和So函数

    convey函数可以嵌套使用,第一个参数都是对测试用例的描述,第二个参数有所不同。外层的convery第二个参数必须时testing.T指针。第三个参数是函数,保存其他测试用例。内层的convey的第二个参数是测试执行函数

    So函数用来对函数的返回值做判断的。提供了很多类型,ShouldBeNil,ShouldBeERRor,ShouldBeEmpty等等。基本都覆盖到了

  • 相关阅读:
    数1的个数
    找水王2
    书店促销
    返回一个二维整数数组中最大联通子数组的和
    敏捷软件开发读书笔记(三)
    软件工程团队开发——第一次冲刺会议总结
    返回一个二维整数数组中最大联通子数组的和
    结对项目开发电梯调度
    《最后期限》——读书笔记03
    最后期限——阅读笔记2
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/11876714.html
Copyright © 2011-2022 走看看