2017-04-12 10 views
3

単体テストを実行しているときに、コードカバレッジメトリックを取得することは可能です。しかし、我々は同様に、バイナリ自体に対して統合テスト(複数)を実行するとカバレッジが何であるかを知っていただきたいと思います:Goバイナリからコードカバレッジを取得する方法は?

go build 
./mybin somefile1 
./mybin somefile2 
# ... test a bunch more files and input flags 

これを実行することが可能ですか?バイナリはテスト目的のためだけにビルドできるので、必要に応じて任意のコンパイルオプションを使用できます。

+1

goテストフレームワークを使用してテストを実行するオプションはありますか? – Flimzy

+0

可能です。 os.Argsをスタブしてテストから呼び出すことができます。しかし、私は、CLIで実行したときにアプリケーションのどの部分が触れられていないかを知ることができるブラックボックスアプローチを好むだろう。また、bashはもっと複雑になり、多くの時間を変更する可能性があります。 Goよりも管理が簡単です。 –

答えて

2

Goカバレッジツールは、テストパッケージとの組み合わせでのみ動作すると思います。しかし、すべての希望が失われるわけではありません。

統合テストをgo testingフレームワークに強制することができれば、必要なものだけを用意する必要があります。これは、聞こえるほど難しいはずはありません。

基本的には:

  1. ルーチン行くにあなたのmain()機能を実行し、テストファイルを書く:テスト内から実行している本当のアプリで

    func TestMainApp(t *testing.T) { 
        go main() 
        // .. then start your integration tests 
    } 
    
  2. を、あなたの統合を開始しtests-おそらくexec.Cmdの助けを借りて。

  3. あなたのカバレッジ統計情報を収集してください。

  4. 利益。

この記事(Go coverage with external tests)は、1年前から同様のアプローチを概説しています。

+1

ええ、それは私が思っていたことの線に沿ったものです。ありがとう! –

関連する問題