go test单元测试中 t.Errorf和t.Fatalf 有什么区别

在 Go 的 testing 包中,t.Errorft.Fatalf 都用于报告测试失败,但它们的行为有所不同。以下是两者的详细区别:

t.Errorf

  • 作用: 记录一个错误信息,并标记当前测试为失败。
  • 行为: 虽然会记录错误信息并标记测试为失败,但测试函数仍然会继续执行后续的代码。
  • 适用场景: 当你希望记录多个错误而不立即停止测试时使用。

t.Fatalf

  • 作用: 记录一个致命错误信息,并标记当前测试为失败。
  • 行为: 一旦调用 t.Fatalf,它会立即终止当前测试函数的执行,并跳过所有后续的代码。
  • 适用场景: 当某个错误条件发生后,继续执行后续代码没有意义时使用。

示例代码

下面是一个示例代码,展示了 t.Errorft.Fatalf 的使用差异:

package mytest

import (
    "testing"
)

func TestExample(t *testing.T) {
    // 测试第一个条件
    if 1 != 2 {
        t.Errorf("Expected 1 to equal 2") // 记录错误但继续执行
    }

    // 测试第二个条件
    if true {
        t.Errorf("This is another error") // 记录另一个错误但继续执行
    }

    // 测试第三个条件
    if false {
        t.Fatalf("This will terminate the test") // 记录错误并终止测试
    }

    // 这段代码不会被执行
    t.Log("This log statement will not be reached")
}

运行结果

运行上述测试代码时,输出可能如下所示:

--- FAIL: TestExample (0.00s)
    mytest_test.go:9: Expected 1 to equal 2
    mytest_test.go:13: This is another error
FAIL

注意到 t.Fatalf 中的日志和后续的 t.Log 语句都没有被执行,因为 t.Fatalf 导致了测试的提前终止。

总结

  • 使用 t.Errorf 来记录错误但允许测试继续执行。
  • 使用 t.Fatalf 来记录致命错误并立即终止测试。

这种区分使得你在编写测试时可以根据具体情况灵活地控制测试的流程和日志记录。

posted @   仁义礼智信的  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示