• Golang单元测试举例


    1.第一个例子

    cal.go 

    1. package main
    2. func addUpper(n int) int {
    3. res := 0
    4. for i := 1; i <= n; i++ {
    5. res += i
    6. }
    7. return res
    8. }
    9. func getSub(n1 int, n2 int) int {
    10. return n1 - n2
    11. }

    cal_test.go

    1. package main
    2. //测试文件名必须是_test.go结尾
    3. //测试函数必须Test开头
    4. import (
    5. "fmt"
    6. "testing"
    7. )
    8. // 编写要给测试用例,去测试addUpper是否正确
    9. func TestAddUpper(t *testing.T) {
    10. //调用
    11. res := addUpper(10)
    12. if res != 55 {
    13. //输出错误信息,退出程序
    14. t.Fatalf("AddUpper(10)执行错误,期望值=%v,实际值=%v\n", 55, res)
    15. }
    16. //如果正确,输出日志
    17. t.Logf("AddUpper(10) 执行正确...")
    18. }
    19. func TestHello(t *testing.T) {
    20. fmt.Println("TestHello被调用了")
    21. }
    22. // 编写要给测试用例,去测试addUpper是否正确
    23. func TestGetSub2(t *testing.T) {
    24. //调用
    25. res := getSub(10, 3)
    26. if res != 7 {
    27. t.Fatalf("getSub(10,3)执行错误,期望值=%v,实际值=%v\n", 7, res)
    28. }
    29. //如果正确,输出日志
    30. t.Logf("getSub(10,3) 执行正确...")
    31. }

    说明:再GoLand中,要运行测试哪个函数可以自行选择

    测试文件名必须以_test.go结尾;

    测试方法的开头必须是Testxxx() 

    2.第二个例子,测试对象的序列化和反序列化

    monster.go 

    1. package test2
    2. import (
    3. "encoding/json"
    4. "fmt"
    5. "os"
    6. )
    7. type Monster struct {
    8. Name string
    9. Age int
    10. Skill string
    11. }
    12. // 序列化对象
    13. func (this *Monster) Store() bool {
    14. //先序列化
    15. data, err := json.Marshal(this)
    16. if err != nil {
    17. fmt.Println("marshal err=", err)
    18. return false
    19. }
    20. //保存到文件
    21. filePath := "e:/monster.ser"
    22. err = os.WriteFile(filePath, data, 0666)
    23. if err != nil {
    24. fmt.Println("write file err=", err)
    25. return false
    26. }
    27. return true
    28. }
    29. // 反序列化对象
    30. func (this *Monster) ReStore() bool {
    31. //1.从文件中读取序列化字符串
    32. filePath := "e:/monster.ser"
    33. data, err := os.ReadFile(filePath)
    34. if err != nil {
    35. fmt.Println("ReadFile err=", err)
    36. return false
    37. }
    38. //2.使用data []byte 反序列化
    39. err = json.Unmarshal(data, this)
    40. if err != nil {
    41. fmt.Println("Unmarshal err=", err)
    42. return false
    43. }
    44. return true
    45. }

    monster_test.go

    1. package test2
    2. import (
    3. "fmt"
    4. "testing"
    5. )
    6. func TestStrore(t *testing.T) {
    7. //先创建一个Monster
    8. monster := &Monster{
    9. Name: "林动",
    10. Age: 20,
    11. Skill: "大荒芜经",
    12. }
    13. res := monster.Store()
    14. if !res {
    15. t.Fatalf("monster.Store()错误,希望为=%v 实际为=%v\n", true, res)
    16. }
    17. t.Logf("monster.Store() 测试成功")
    18. }
    19. func TestReStore(t *testing.T) {
    20. //先创建一个Monster实例,不需要指定字段的值
    21. var monster = &Monster{}
    22. res := monster.ReStore()
    23. if !res {
    24. t.Fatalf("monster.ReStore() 错误,希望=%v 实际为=%v\n", true, res)
    25. }
    26. //进一步判断
    27. fmt.Printf("%v %v %v\n", monster.Name, monster.Age, monster.Skill)
    28. }
    1. === RUN TestReStore
    2. 林动 20 大荒芜经
    3. --- PASS: TestReStore (0.00s)
    4. PASS

  • 相关阅读:
    作用域和作用域链
    iOS开发 Xcode快捷键
    Linux内核中竞态学习过程的问题
    使用springcloud-seata解决分布式事务问题-2PC模式
    @RestControllerAdvice 统一异常处理
    ChatTTS,语气韵律媲美真人的开源TTS模型,文字转语音界的新魁首,对标微软Azure-tts
    uboot 添加命令
    ruoyi权限设置的坑
    liunx标准输入与输出
    阿里云主机遭受DDOS攻击IP不能使用如何更换弹性公网IP
  • 原文地址:https://blog.csdn.net/m0_46306264/article/details/132630316