XMLデータを生成したos/exec.Command()
を使用してコマンドを実行しています。コマンドは、GetData()
という関数で実行されます。GetData()
をテストするために、作成したtestdata
をいくつか持っています。私の_test.go
には、GetData()
を呼び出すTestGetData
がありますが、os.exec
を使用しますが、代わりにtestdata
を使用します。これを達成するための良い方法は何ですか?GetData
を呼び出すときは、「テスト」フラグモードを使用して、GetData(mode string)
というファイルを読み取る必要がありますか?
exec.Command
を使用しますcmd.StdoutPipe
にキャプチャして、io.ReadCloser
を返します(これは重要になります)io.ReadCloser
に取り込み、次にコマンドをStart
してから、Wait
を呼び出してすべてのデータが読み取られるのを待ちます。これらの2つの呼び出しの間で、データをPayload
構造体にデコードします。msg.xml
内に含まれているものです。<message>
のstrings.ToUpper
です)lib
からコピーすることです。"seam"
」がどこから始まるかがわかります。ここで、io.ReadCloser
を取得します。この既存の抽象化を使用して、問題を分離し、コードをテスト可能にすることができます。TestGetData
は2つの懸念事項の間の統合テストとして機能することができるため、それが機能し続けることを確認するためにそれを保持します。GetData
が入力をio.Reader
から取得するようになったので、これをテスト可能にして、データの取得方法を考慮しなくなりました。人々はio.Reader
(これは非常に一般的です)を返すもので関数を再利用できます。GetData
の単体テストの例です。