登录
首页 >  Golang >  Go问答

允许测试结果取决于外部工具的安装

来源:stackoverflow

时间:2024-04-16 08:39:31 473浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《允许测试结果取决于外部工具的安装》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我正在创建一个 golang 项目,并且在根据功能添加测试方面做得非常好。总体思路是我在文件和 git 分支之间执行“语义差异”。对于最新功能,行为取决于是否安装了外部工具 (tree-sitter-cli),以及安装了哪些额外功能。

如果未安装外部工具(或其可选语法),我预计内部函数会产生不同的结果。然而,这两个结果都与我的工具(sdt)本身是正确的一致。例如,这是我从另一种编程语言修改而来的测试,在没有树保姆的情况下进行了分析:

func testnosemanticdiff(t *testing.t) {
    // narrow the options to these test files
    opts := options
    opts.source = file0.name
    opts.destination = file1.name

    report := treesitter.diff("", opts, config)

    if !strings.contains(report, "| no semantic differences detected") {
        t.fatalf("failed to recognize semantic equivalence of %s and %s",
            opts.source, opts.destination)
    }
}

各种支持的语言的测试在形式上大多相同。然而,在这种情况下,如果缺少外部工具(或不包含该功能),则接收“|此格式没有可用的语义分析器”的“报告”也将是正确的值。

问题是,我可以运行代码来确定期望的值;但理想情况下,该代码“在测试顶部运行一次”,而不是在许多类似测试中的每个测试中重新检查。

所以我理想的情况是首先运行某种设置/脚手架,然后编写如下的单独测试:

if !treeSitterInstalled { // checked once at start of test file
    if !strings.Contains(report, "appropriate response") { ... }
} else if treeSitterNoLangSupport { // ditto, configured once
    if !strings.Contains(report, "this other thing") { ... }
} else {
    if !string.Contains(report, "the stuff where it's installed") { ... }
}

正确答案


在您的测试文件中,您可以简单地使用 init 函数来检查外部依赖项,并在同一文件内设置一个变量,然后可以在各个测试中检查该变量。

到这里,我们也就讲完了《允许测试结果取决于外部工具的安装》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>