Go语言单元测试

Go语言似乎是个偏执狂,牺牲了不必要的灵活性,带来一些强制的编程风格和约定。比如:

  1. 无任何形式的Makefile,模块就是目录、包就是目录、编译配制就是目录!
  2. 不光目录被用上了,文件名还能指定用途。文件名后缀为_test.go的都是单元测试文件,_linux32.go就是32位linux特定的代码。
  3. 不光文件名被用上了,函数名还有特定用途。在单元测试文件中,测试函数以Test开头。以大写字母开头的变量、类型和函数是外部可见的,小写字母开头的变量、类型和函数是外部不可见的。

类似的约定也不好说是go语言首创,在一些文件格式中也有类似规范。但是我暂时不知道到有什么其它编程语言对编程风格这么带强制性。

对于单元测试,假设有如下calc.go文件:

package calc

func Add(a,b int) int {
     return a +
}

func Max(a,b int) (ret int) {
    ret =
     if b > a { 
        ret =
    }   
     return
}

func Min(a,b int) (ret int) {
    ret =
     if b < a { 
        ret =
    }   
     return
}
有如下测试代码calc_test.go:

 

package calc

import (
     "testing"
)
type calcTest struct {
    a,b,ret int
}

var addTests = []calcTest{
    calcTest{ 4, 6, 10},
    calcTest{ 5, 6, 11},
    calcTest{ 8, - 10, - 2},
}

func TestAdd(t *testing.T) {
     for _,v : = range addTests {
        ret : = Add(v.a,v.b)
         if ret != v.ret {
            t.Errorf( "%d add %d,want %d,but get %d",v.a,v.b,v.ret,ret)
        }
    }

}

func TestMax(t *testing.T){
    a,b : = 100, 300
    ret : = Max(a,b)
     if ret != b {
        t.Errorf( "%d is bigger than %d",b,a)
    }
}

func TestMin(t *testing.T) {
    a,b : = 100, 300
    ret : = Min(a,b)
     if ret != a {
        t.Errorf( "%d is smaller than %d",a,b)
    }
}
执行go test 得到如下结果:
PASS
ok      _ /home /liangdi /Desktop /test /go /testing     0. 008
在calc.go中设计一个逻辑错误,把 func Min(a,b int) ret int 改为:
func Min(a,b int) (ret int) {
    ret =
     //逻辑错误
     if b > a { 
        ret =
    }   
     return
}
执行go test的结果为:
-- - FAIL : TestMin ( 0.00 seconds)
    calc_test.go : 38 : 100 is smaller than 300
FAIL
exit status 1
FAIL    _ /home /liangdi /Desktop /test /go /testing     0. 005s

转载于:https://www.cnblogs.com/damir/archive/2012/05/06/2486525.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值