Upgrade to Pro — share decks privately, control downloads, hide ads and more …

外部コマンドの実行を含む関数のテスト

pongzu
April 23, 2022

 外部コマンドの実行を含む関数のテスト

pongzu

April 23, 2022
Tweet

More Decks by pongzu

Other Decks in Technology

Transcript

  1. Copyright Kanmu, Inc. All right reserved. interfaceを用いたモック 6 1 •

    Executor interface を定義 • Executorを受け取るrunLs()を定義 • テスト時はモックのExecutorに差し替える 書くこと多すぎるし、複雑 すぎるな...
  2. Copyright Kanmu, Inc. All right reserved. exec_test.goの実装 10 1 •

    os.Args[0]は実行コマンドのパスが入る ◦ go test実行時はビルドしたテストバイナリ自体 • exec.Commandにos.Args[0]を渡すと外部コマンド としてテストバイナリ自身を実行できる https://pkg.go.dev/os/execを参照
  3. Copyright Kanmu, Inc. All right reserved. exec_test.goの実装 11 1 •

    テスト実行時に-test.run=オプションを与えて実行 処理を絞ることができる • cmd.Output()で実行されるのはテストバイナリ自体 で、その中で呼ばれるのはTestHelperProcess() https://pkg.go.dev/os/execを参照
  4. Copyright Kanmu, Inc. All right reserved. exec_test.goの実装 12 1 https://pkg.go.dev/os/execを参照

    • モックしたいコマンド名とその引数を取得 • コマンド別に任意の処理を書く • helperCommand()でセットしたテストバイ ナリ自身の呼び出し時にここに書いた処理 が実行される
  5. Copyright Kanmu, Inc. All right reserved. 参考資料/使ったコード等 • 今回使ったコード ◦

    https://github.com/pongzu/testing-exec-sample • 参考資料/コード ◦ https://npf.io/2015/06/testing-exec-command ◦ https://pkg.go.dev/os/exec