3.31 Go 测试模块|Go主题月

256 阅读2分钟

  上几节中我们介绍了如何入门Go模块,如何通过本地依赖模块方式进行调用方法,完成了我们所谓的业务侧代码,在正常流程中,我们还需要自己对于代码的自测才能让一个项目正常的进行发布上线,这一章节就介绍下如何在Go中使用测试。

代码编写

  本文也是基于之前完成的模块进行添加测试模块,所以需要先确保下之前的模块是否已经存在。

  1. greetings目录中,创建一个名为greetings_test.go的文件。
  2. 编写对应greetings_test.go文件。
    package greetings
    
     import (
         "testing"
         "regexp"
     )
    
     func TestHelloName(t *testing.T) {
         name := "Gladys"
         want := regexp.MustCompile(`\b`+name+`\b`)
         msg, err := Hello("Gladys")
         if !want.MatchString(msg) || err != nil {
             t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
         }
     }
    
     func TestHelloEmpty(t *testing.T) {
         msg, err := Hello("")
         if msg != "" || err == nil {
             t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
         }
     }
    
    在这部分我们做了如下的改动:
    1. 在与测试代码相同的包中实现测试函数。
    2. 创建两个测试函数来测试问候语。测试函数名的形式为TestName,其中Name表示关于特定测试的一些信息。同样,测试函数使用指向测试包测试的指针。T类型作为参数。您可以使用这个参数的方法来报告和记录您的测试。
    3. greetings目录的命令行中,运行go test命令来执行测试。

        go test命令执行测试文件(以_test.go结尾)中的测试函数(其名称以test开头)。您可以添加-v标志来获得列出所有测试及其结果的详细输出。

    [root@montos-prod greetings]# go test -v
    === RUN   TestHelloName
    --- PASS: TestHelloName (0.00s)
    === RUN   TestHelloEmpty
    --- PASS: TestHelloEmpty (0.00s)
    PASS
    ok      montos.com/greetings    0.002s
    

上述是一个正常函数进行测试的流程,那么如果是错误流程又是什么样子呢?

  • 修改对应greetings中代码,使其不符合正常流程。
    func Hello(name string) (string, error) {
      if name == "" {
          return name, errors.New("empty name")
      }
      // message := fmt.Sprintf(randomFormat(), name)
         message := fmt.Sprint(randomFormat())
       return message, nil
      }
    
  • 运行测试命令。
    [root@montos-prod greetings]# go test
      --- FAIL: TestHelloName (0.00s)
          greetings_test.go:14: Hello("Gladys") = "Hail, %v! Well met!", <nil>, want match for `\bGladys\b`, nil
      FAIL
      exit status 1
      FAIL    montos.com/greetings    0.002s
    

总结

  作为代码人!!不仅仅要码的一手好代码,更是要学会如何提前发现问题,并且解决问题,自测真的很重要!!!!