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. 外部コマンドの実行を含む関数のテスト
    Yu Tanaka
    Kanmu, Inc.
    Go Conference 2022 Spring
    April 23,2022

    View full-size slide

  2. Copyright Kanmu, Inc. All right reserved. 2
    田中 悠(ぽんず)
    @pongzu
    @_pongzu
    自己紹介

    View full-size slide

  3. Copyright Kanmu, Inc. All right reserved.
    バンドルカードとpoolを作ってます

    View full-size slide

  4. Copyright Kanmu, Inc. All right reserved.
    外部コマンドをコード内から実行する
    1

    View full-size slide

  5. Copyright Kanmu, Inc. All right reserved.
    interfaceを用いたモック
    1
    exec.Command()呼び出しから
    cmd.Output()の実行まで、まるご
    とモックすればよい?

    View full-size slide

  6. Copyright Kanmu, Inc. All right reserved.
    interfaceを用いたモック
    6
    1
    ● Executor interface を定義
    ● Executorを受け取るrunLs()を定義
    ● テスト時はモックのExecutorに差し替える
    書くこと多すぎるし、複雑
    すぎるな...

    View full-size slide

  7. Copyright Kanmu, Inc. All right reserved.
    interfaceを用いたモック
    1
    exec.Command()呼び出しから
    cmd.Output()の実行まで、まるご
    とモックすればよい?

    View full-size slide

  8. Copyright Kanmu, Inc. All right reserved.
    exec_test.goの実装
    1
    exec.Command()にビルドした
    テストバイナリ自身を渡して実
    行バイナリ自体を差し替える

    View full-size slide

  9. Copyright Kanmu, Inc. All right reserved.
    exec_test.goの実装
    9
    1
    https://pkg.go.dev/os/execを参照

    View full-size slide

  10. 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を参照

    View full-size slide

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

    View full-size slide

  12. Copyright Kanmu, Inc. All right reserved.
    exec_test.goの実装
    12
    1
    https://pkg.go.dev/os/execを参照
    ● モックしたいコマンド名とその引数を取得
    ● コマンド別に任意の処理を書く
    ● helperCommand()でセットしたテストバイ
    ナリ自身の呼び出し時にここに書いた処理
    が実行される

    View full-size slide

  13. 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

    View full-size slide

  14. Copyright Kanmu, Inc. All right reserved.
    We are hiring!
    まだまだやりたいことはたくさん!
    仲間になりませんか!

    View full-size slide