Golang 【第十三篇】单元测试

Golang  【第十三篇】单元测试

 

1 原理与总结

 

2 测试实例1

 

 

package cal

//一个被测试函数
func addUpper(n int)  int {
    res := 0
    for i := 1; i <= n - 1; i++ {
        res += i
    }
    return res
}

//求两个数的查
func getSub(n1 int, n2 int) int {
    return n1 - n2
}
cal.go
package cal
import (
    "fmt"
    "testing" //引入go 的testing框架包
)

//编写要给测试用例,去测试addUpper是否正确
func TestAddUpper(t *testing.T) {

    //调用
    res := addUpper(10)
    if res != 55 {
        //fmt.Printf("AddUpper(10) 执行错误,期望值=%v 实际值=%v\n", 55, res)
        t.Fatalf("AddUpper(10) 执行错误,期望值=%v 实际值=%v\n", 55, res)
    }

    //如果正确,输出日志
    t.Logf("AddUpper(10) 执行正确...")

}

func TestHello(t *testing.T) {

    fmt.Println("TestHello被调用..")

}
cal_test.go
package cal
import (
    _ "fmt"
    "testing" //引入go 的testing框架包
)

//编写要给测试用例,去测试addUpper是否正确
func TestGetSub(t *testing.T) {

    //调用
    res := getSub(10, 3)
    if res != 7 {
        //fmt.Printf("AddUpper(10) 执行错误,期望值=%v 实际值=%v\n", 55, res)
        t.Fatalf("getSub(10, 3) 执行错误,期望值=%v 实际值=%v\n", 7, res)
    }

    //如果正确,输出日志
    t.Logf("getSub(10, 3) 执行正确!!!!...")

}
sub_test.go

 

3 测试实例2

package monster
import (
    "encoding/json"
    "io/ioutil"
    "fmt"
)

type Monster struct {
    Name string
    Age int
    Skill string
} 

//给Monster绑定方法Store, 可以将一个Monster变量(对象),序列化后保存到文件中

func (this *Monster) Store() bool {

    //先序列化
    data, err := json.Marshal(this)
    if err != nil {
        fmt.Println("marshal err =", err)
        return false
    } 

    //保存到文件
    filePath := "d:/monster.ser"
    err = ioutil.WriteFile(filePath, data, 0666)
    if err != nil {
        fmt.Println("write file err =", err)
        return false
    }
    return true
}


//给Monster绑定方法ReStore, 可以将一个序列化的Monster,从文件中读取,
//并反序列化为Monster对象,检查反序列化,名字正确
func (this *Monster) ReStore() bool {

    //1. 先从文件中,读取序列化的字符串
    filePath := "d:/monster.ser"
    data, err := ioutil.ReadFile(filePath)
    if err != nil {
        fmt.Println("ReadFile err =", err)
        return false
    }

    //2.使用读取到data []byte ,对反序列化
    err = json.Unmarshal(data, this)
    if err != nil {
        fmt.Println("UnMarshal err =", err)
        return false
    }
    return true
}
monster.go
package monster

import (
    "testing"
)

//测试用例,测试 Store 方法
func TestStore(t *testing.T) {

    //先创建一个Monster 实例
    monster := &Monster{
        Name : "红孩儿",
        Age :10,
        Skill : "吐火.",
    }
    res := monster.Store()
    if !res {
        t.Fatalf("monster.Store() 错误,希望为=%v 实际为=%v", true, res)
    }
    t.Logf("monster.Store() 测试成功!")
}

func TestReStore(t *testing.T) {

    //测试数据是很多,测试很多次,才确定函数,模块..
    
    //先创建一个 Monster 实例 , 不需要指定字段的值
    var monster = &Monster{}
    res := monster.ReStore() 
    if !res {
        t.Fatalf("monster.ReStore() 错误,希望为=%v 实际为=%v", true, res)
    }

    //进一步判断
    if monster.Name != "红孩儿" {
        t.Fatalf("monster.ReStore() 错误,希望为=%v 实际为=%v", "红孩儿", monster.Name)
    }

    t.Logf("monster.ReStore() 测试成功!") 
}
monster_test.go

 

posted @ 2021-08-18 01:02  风hua  阅读(37)  评论(0)    收藏  举报