淄博网站制作形象,vps装网站管理系统,自动跳转导航入口,360建筑网消防工程师Go测试中的.golden 文件是干什么用的#xff1f;请举例说明 在Go语言中#xff0c;.golden文件通常用于测试中的黄金文件#xff08;golden files#xff09;。黄金文件是在测试期间记录预期输出结果的文件。测试用例运行时#xff0c;黄金文件用于比较实际输出与预期输出… Go测试中的.golden 文件是干什么用的请举例说明 在Go语言中.golden文件通常用于测试中的黄金文件golden files。黄金文件是在测试期间记录预期输出结果的文件。测试用例运行时黄金文件用于比较实际输出与预期输出是否一致。 通常.golden 文件的命名规则是将测试文件的名称与 .golden 后缀相结合例如如果测试文件为 foo_test.go则相应的 .golden 文件可能被命名为 foo_test.golden。 在测试期间如果测试输出与 .golden 文件的内容匹配则测试被认为是通过的。否则测试将失败并显示差异信息以帮助开发人员确定测试失败的原因。 需要注意的是.golden 文件不应该包含敏感信息因为这些文件通常被包含在源代码仓库中并且可能会被共享或分发给其他人。 .golden 文件的命名并没有一个官方规定的标准但是根据一些 Go 语言社区的约定.golden 文件通常被命名为 .golden 是因为这个后缀在文件名中很不常见因此可以很容易地与其他文件进行区分。 此外一些人认为 .golden 这个名称的来源可能与软件测试中的“黄金数据”Golden Data有关。在软件测试中“黄金数据”指的是已知正确的数据用于验证软件是否按照预期运行。因此将测试期望输出与已知正确的数据进行比较与软件测试中使用的“黄金数据”进行比较是相似的。这种类比可能也是 .golden 文件名称的一个来源。 举个例子假设你正在编写一个函数来格式化一个字符串并且你想要编写相应的测试用例。你可以创建一个黄金文件来保存预期的输出结果。在测试运行时测试代码将生成实际的输出结果并将其与黄金文件中的预期结果进行比较。如果实际输出与预期输出匹配测试将被标记为通过。如果不匹配测试将被标记为失败以便你可以检查代码的更改是否是有意的。 以下是一个示例 假设你有一个名为formatter.go的文件其中包含一个FormatString函数用于格式化字符串。你还有一个测试文件formatter_test.go其中包含一个测试用例来测试FormatString函数。 在测试文件中你可以创建一个黄金文件expected_output.golden其中包含你期望的输出结果。然后你的测试用例可以读取这个黄金文件调用FormatString函数生成实际的输出并将其与黄金文件中的预期结果进行比较。 // formatter.gopackage mainimport fmtfunc FormatString(s string) string { return fmt.Sprintf(Formatted: %s, s)}// formatter_test.gopackage mainimport ( io/ioutil testing)func TestFormatString(t *testing.T) { input : Hello, World! expectedOutput, err : ioutil.ReadFile(expected_output.golden) if err ! nil { t.Fatalf(Failed to read golden file: %v, err) } actualOutput : FormatString(input) if string(actualOutput) ! string(expectedOutput) { t.Errorf(Unexpected output:\nExpected: %s\nActual: %s, expectedOutput, actualOutput) }} 在这个例子中测试代码读取expected_output.golden文件它的内容可以是Formatted: Hello, World!。然后测试用例调用FormatString函数并将其输出与黄金文件中的预期结果进行比较。如果两者不匹配测试将失败并输出相应的错误消息。 使用黄金文件可以有效地验证代码的输出是否与预期一致并提供了一种可持续的方式来更新测试结果。如果你对FormatString函数进行了更改你只需验证黄金文件是否需要相应地更新而无需手动更新所有测试用例的预期输出。 试一下 # command-line-arguments [command-line-arguments.test]./formatter_test.go:15:18: undefined: FormatString 需要对 运行/调试设置做如下修改 同时需要先执行 go mod init golden 和 go mod tidy否则上图会提示 错误: 找不到软件包 golden 新建 expected_output.golden,如果什么内容也不写入执行单测 即 需要将预期的内容写到expected_output.golden中最后会做一个比较 和断言有何区别 .golden 文件和断言是测试中两个不同的概念它们有一些相似之处但也有一些区别。 断言是在测试代码中使用的一种机制用于检查代码的行为是否符合预期。测试代码中通常会使用断言来检查一些条件是否为真如果条件不满足则测试将失败。例如在 Go 语言中可以使用 assert 包中的 Equal 函数来检查两个值是否相等。 与断言不同.golden 文件通常用于测试输出或结果是否与预期的输出或结果匹配。测试代码会生成一些输出或结果然后与预期的输出或结果进行比较如果匹配则测试通过否则将测试失败。.golden 文件是预期输出或结果的一种形式测试代码会将其与实际输出或结果进行比较以确定测试是否通过。 因此断言和.golden 文件是测试中两种不同的机制它们用于检查不同的测试条件。断言通常用于检查代码的行为是否符合预期而 .golden 文件通常用于测试输出或结果是否与预期的输出或结果匹配。 (其实和直接在断言里写预期的字符串效果类似但写文件更适用于内容较多的case吧; 或者Go官方没有提供断言一般的项目都使用第三方的 github.com/stretchr/testify/assert) “黄金文件”这个概念在其他编程语言中有吗 虽然 黄金文件 这个特定术语在其他编程语言中可能不常见但类似的概念在其他语言和测试框架中也存在。这些概念可能被称为 参考文件、预期输出文件、基准文件 或 固定输出文件具体取决于使用的语言和框架。 下面是一些示例 Python Unittest在Python的unittest框架中可以使用 assertMultiLineEqual() 方法来比较实际输出和参考文件中的内容。参考文件可以是文本文件或其他格式的文件。 Java JUnit在Java的JUnit测试框架中你可以将预期输出作为字符串或文件提供给断言方法然后将实际输出与其进行比较。这类似于使用黄金文件进行比较。 C Catch2Catch2是一个流行的C测试框架。你可以使用 REQUIRE_THAT() 或其他类似的宏来比较实际输出与预期输出。在这种情况下预期输出可以是一个字符串或文件。 尽管不同的编程语言和测试框架可能使用不同的术语但它们都提供了一种机制来验证实际输出与预期输出之间的一致性。这种机制有助于确保代码的行为符合预期并提供一种可持续的方式来更新测试结果。 本文由 mdnice 多平台发布