How to measure Golang integration test coverage?

后端 未结 3 1490
暗喜
暗喜 2021-02-12 19:35

I am trying to use go test -cover to measure the test coverage of a service I am building. It is a REST API and I am testing it by spinning it up, making test HTTP

相关标签:
3条回答
  • 2021-02-12 19:56

    I was pointed at the -coverpkg directive, which does what I need - measures the test coverage in a particular package, even if tests that use this package and not part of it. For example:

    $ go test -cover -coverpkg mypackage ./src/api/...
    ok      /api    0.190s  coverage: 50.8% of statements in mypackage
    ok      /api/mypackage   0.022s  coverage: 0.7% of statements in mypackage
    

    compared to

    $ go test -cover ./src/api/...
    ok      /api    0.191s  coverage: 71.0% of statements
    ok      /api/mypackage   0.023s  coverage: 0.7% of statements
    

    In the example above, I have tests in main_test.go which is in package main that is using package mypackage. I am mostly interested in the coverage of package mypackage since it contains 99% of the business logic in the project.

    I am quite new to Go, so it is quite possible that this is not the best way to measure test coverage via integration tests.

    0 讨论(0)
  • 2021-02-12 20:06

    As far as I know, if you want coverage you need to run go test -cover.

    However it is easy enough to add a flag which you can pass in which will enable these extra tests, so you can make them part of your test suite but don't run them normally.

    So add a command line flag in your whatever_test.go

    var integrationTest = flag.Bool("integration-test", false, "Run the integration tests")
    

    Then in each test do something like this

    func TestSomething(t *testing.T){
        if !*integrationTest {
            t.Skip("Not running integration test")
        }
        // Do some integration testing
    }
    

    Then to run the integration tests

    go run -cover -integration-test
    
    0 讨论(0)
  • 2021-02-12 20:14

    you can run go test in a way that creates coverage html pages. like this:

    go test -v -coverprofile cover.out ./...
    go tool cover -html=cover.out -o cover.html
    open cover.html
    
    0 讨论(0)
提交回复
热议问题