【问题标题】:How to test only one benchmark function?如何只测试一个基准函数?
【发布时间】:2023-04-06 16:06:01
【问题描述】:

在我的 Go 包中有几个基准文件,例如 map1_benchmark_test.gomap2_benchmark_test.go。在每个*_benchmark_test.go 文件中,都有不止一个基准函数,例如func BenchmarkMapTravel(b *testing.B)func BenchmarkMapGet(b *testing.B)

问题是,我怎样才能只测试一个基准函数?

我尝试阅读一些手册,但运行 go help test 时对基准测试一无所知。

【问题讨论】:

    标签: unit-testing go benchmarking


    【解决方案1】:

    Description of testing flags

    -test.bench pattern
        Run benchmarks matching the regular expression.
        By default, no benchmarks run.
    
    -test.run pattern
        Run only those tests and examples matching the regular
        expression.
    

    为方便起见,测试二进制文件的每个-test.X 标志都是 也可用作“go test”本身中的标志-X

    寻求帮助,

    $ go help testflag
    

    例如,

    go test -test.bench MapTravel
    go test -test.bench MapGet
    

    go test -bench MapTravel
    go test -bench MapGet
    

    要绕过测试功能,请包含一个-test.run 模式,该模式会过滤掉每个测试。例如,

    go test -test.bench MapTravel -test.run=thisexpressionwontmatchanytest
    

    go test -bench MapTravel -run=^$
    

    【讨论】:

    • 只运行一个基准测试,但其他测试方法如func TestMapGet(t *testing.T) 也不是基准测试。那么,如何在没有任何其他测试运行的情况下运行基准测试呢?
    • 请注意,您不需要在标志中添加test. 前缀,您可以只写go test -bench MapGet -run XXX,这样输入起来会比较简洁。 (来自文档:为方便起见,测试二进制文件的每个-test.X 标志也可用作go test 本身中的标志-X。)
    • 在本机 Windows 命令行上,请注意 ^ 是转义字符(如其他地方的 \)。因此需要输入-run=^^$,但更简单的是-run==(因为等号不是特殊的正则表达式,也不是任何测试名称的一部分)。
    【解决方案2】:

    没有可以提供的标志,它只能运行基准测试(或只运行一个基准测试)。这些only flags related 是:

    -bench 正则表达式 运行与正则表达式匹配的基准。 默认情况下,不运行任何基准测试。要运行所有基准测试, 使用“-bench”。或“-bench=.”。

    -运行正则表达式 只运行那些与常规匹配的测试和示例 表达。

    因此,如果您只想运行一个基准测试,您可以这样做:

    go test -bench=nameOfYourBenchmark -run=^a
    

    这将导致只运行以a 开头的测试。而且因为每个测试都应该命名为Test<something>,所以不会有要运行的测试。

    仅运行基准测试:

    go test -bench=. -run=^a
    

    【讨论】:

      【解决方案3】:

      仅测试TestFuncOne

      $>> go test -run TestFuncOne
      

      stuff_to_test.go

      TestFuncOne() {
      }
      
      TestFuncTwo() {
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-08
        相关资源
        最近更新 更多