• 做一个测试


    现在呢,你一定已经把你的代码放在了安全的地方,并做了测试.在编码期间做测试能帮助你发现bug.在本节中,使用hello函数来做测试.

    Go语言内置单元测试,以方便你即使测试代码,具体来说,使用命名规范、Go的test包和Go test命令,您可以快速编写和执行测试。
    在greeting路径下,创建一个名为 greetings_test.go的文件
      文件名以_test.go结尾,是用来告诉go test命令 这个文件包含test函数
    在greeting_test.go,粘贴下面的代码

    package greetings
    
    import (
        "testing"
        "regexp"
    )
    
    // TestHelloName calls greetings.Hello with a name, checking
    // for a valid return value.
    func TestHelloName(t *testing.T) {
        name := "Gladys"
        want := regexp.MustCompile(``+name+``)
        msg, err := Hello("Gladys")
        if !want.MatchString(msg) || err != nil {
            t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
        }
    }
    
    // TestHelloEmpty calls greetings.Hello with an empty string,
    // checking for an error.
    func TestHelloEmpty(t *testing.T) {
        msg, err := Hello("")
        if msg != "" || err == nil {
            t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
        }
    }

    这片代码:

    • 实现了test函数
    • 创建了两个测试函数为了测试greetings.Hello函数,测试函数名称的格式是 TestName, Name表述了具体做哪项测试,此外,测试函数 有个指针参数testing 它来源于testing包,你可以使用这个参数方法,来报告和记录你的测试.
    • 实现了两个测试
        TestHelloName调用了Hello函数,传入一个name值应该能返回一个响应消息,如果这个调用返回了一个错误或意外相应消息,你可以使用 t 参数的Fatalf 方法来将消息打印到控制台并结束执行。
        TestHelloEmpty调用Hello函数,传入一个空字符串,这个测试是用来确认你的错误处理能正常工作,如果这个调用返回了一个非空错误或没有返回错误,你可以使用t 参数的Fatalf方法,将详细打印到控制台并结束执行.

    3.在greeting路径的命令提示符下,运行go test命令,来执行测试
      go test命令执行测试文件(这些文件都会以_test.go作为结尾)中的测试函数(这些函数都会以test开头), 你也可以添加-v 标识参数来输出,所有测试结果.

    $ go test
    PASS
    ok      example.com/greetings   0.364s
    
    $ go test -v
    === RUN   TestHelloName
    --- PASS: TestHelloName (0.00s)
    === RUN   TestHelloEmpty
    --- PASS: TestHelloEmpty (0.00s)
    PASS
    ok      example.com/greetings   0.372s

    4.查看失败的测试,
      在TestHelloname测试函数中检查返回值,为了能够产生失败的测试效果,需要把greeting.Hello函数的打印name的输出删去.
      在greeting/greetings.go中,粘贴下面代码来代替Hello函数,注意,高亮行改变了函数的返回值,相当于,name参数被意外删除

    // Hello returns a greeting for the named person.
    func Hello(name string) (string, error) {
        // If no name was given, return an error with a message.
        if name == "" {
            return name, errors.New("empty name")
        }
        // Create a message using a random format.
        // message := fmt.Sprintf(randomFormat(), name)
        message := fmt.Sprint(randomFormat())
        return message, nil
    }

    5.在greeting路径下,运行go test命令
      这次,运行 go test 命令但不加-v标识参数,于是,输出中只会包含测试失败信息,当有大量测试时,这会很有用,TestHelloName测试应该会失败,TestHelloEmpty会一直通过测试

    $ go test
    --- FAIL: TestHelloName (0.00s)
        greetings_test.go:15: Hello("Gladys") = "Hail, %v! Well met!", <nil>, want match for `Gladys`, nil
    FAIL
    exit status 1
    FAIL    example.com/greetings   0.182s

    接下来,你将会看到,如何在本地编译并安装代码

  • 相关阅读:
    OA 办公自动化系统:权限管理模块的实现原理思路
    Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/annotations/Entity
    Spring —— 三种配置数据源的方式:spring内置、c3p0、dbcp
    使用JdbcTemplate简化JDBC操作 实现数据库操作
    Spring aop——前置增强和后置增强 使用注解Aspect和非侵入式配置
    ( 解压缩版 免安装版 或 zip版 )如何修改mysql5.6.24 字符编码
    手机开发插件安装Xamarin
    JQuery对象转dom ,dom转jQuery
    读取XML
    【Android】完善Android学习(六:API 4.0)
  • 原文地址:https://www.cnblogs.com/yaoshi641/p/15242998.html
Copyright © 2020-2023  润新知