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

rks48beu  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(145)

我正在创建一个Golang项目,并在添加测试方面做得很好。一般的想法是在文件和git分支之间执行“语义比较”。对于最新的特性,行为取决于是否安装了外部工具(tree-sitter-cli),以及安装了哪些额外的功能。
如果没有安装外部工具(或者它的可选语法),我期望从我的内部函数得到不同的结果。然而,这两个结果都与我的工具(sdt)本身是正确的一致。例如,下面是一个我从另一种编程语言修改的测试,分析时没有使用tree-sitter:

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") { ... }
}
avwztpqn

avwztpqn1#

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

相关问题