3

単体テストについて質問があります。私は何日もそれについて考えてきましたが、答えを見つけることができませんでした.

たとえば、Web サービスからファイルをダウンロードしてディスクに書き込む機能があるとします。ファイルがダウンロードされてディスクに書き込まれるのを実際に確認せずにテストする目的は何ですか?

Web サービスをモック アウトできることは理解していますが、このシナリオではどのようにすればよいでしょうか? 私の知る限り、Mockito のようなものは動作を模倣するだけで、意味のあるデータ (この例のファイル) を提供しません。

Web サービスの動作を模擬できたとしても、実際にディスクに何かを書き込むことなく、ディスクへのファイルの書き込みを模擬するにはどうすればよいでしょうか?

申し訳ありませんが、これについては具体的な例がありません。お気軽にご意見をお聞かせください。

どうもありがとう

4

2 に答える 2

5

コードを単体テストすると、コードがよりモジュール化されると私はいつも言っています。

あなたの場合、ファイルをディスクに書き込むようなことをテストしたい場合は、代わりにファイルを書き込むメソッドを単純に対話させることができますこれにより、実際の代わりに関数にOutputStream単純に渡すことができます。 bytes は文字列に変換され、コンテンツが実際に期待するものと一致するかどうかを確認します。ByteArrayOutputStreamFileOutputStream

一時ファイルを作成し、その一時ファイルの を渡しFileOutputStreamて書き込み、その後でファイルの内容を確認することも可能です。

メソッドを とやり取りさOutputStreamせることで、ファイル パスの識別や の作成FileOutputStreamなどのプロセスから切り離すことができます。

おっしゃったように、単に Web サービスからデータを取得してファイルに書き込むだけの場合、この関数をテストしてもあまり意味がないかもしれません。ただし、データをインテリジェントに操作する場合や、Web サービスの相互作用が例外をスローしたときに何かを行うことが期待される場合に備えて、テストするのは興味深いことです。

于 2012-04-19T18:57:48.547 に答える
4

たとえば、Web サービスからファイルをダウンロードしてディスクに書き込む機能があるとします。ファイルがダウンロードされてディスクに書き込まれるのを実際に確認せずにテストする目的は何ですか?

なにもない。単体テストではそれをテストしません。そのような場合 (ネットワーク、ファイル システム、データベースとの相互作用) では、統合テストを記述します。多くの場合、類似のツールとフレームワークを使用して単体テストを行いますが、コンポーネントの統合とコンポーネント間の相互作用をテストするという異なる目的を果たします。統合テストは、多くの場合、アプリケーションの実際の使用を模倣します。

関数がファイルをダウンロードするために 1 つのサービス/コンポーネントを呼び出し、それをディスクに保存するために別のサービス/コンポーネントを呼び出すだけの場合、この場合、単体テストはかなり制限されます。

于 2012-04-19T19:09:55.330 に答える