2

私は、堅実なソフトウェア開発について学んでいる段階で、「ペダルからメダルへのコードを光の速度で実行し、実際の計画なしに良い結果を祈る」アプローチは機能しないことに気づきました。

私は、古い (そして確かにそれほど優れていない) 方法を堅実な実践に置き換えようとしています。私はこれまで単体テストを使用したことがありませんでしたが、ピラミッドを学習しようとしていることに加えて (完全なドキュメントのおかげでうまくいっています)、単体テストが一般的にどのように役立つかを確認しようとしています (また、将来的には統合テストを追加します) 、回帰テストなど)。私はこのイントロをnosetest http://ivory.idyll.org/articles/nose-intro.htmlに読みました.(軽率ではありませんが)単体テストを使用して正規表現をテストできることがわかりました.if a=1; b=1; now does a == b. 現時点で確認できるのはこれだけです。このためのフレームワークは必要ありません。正規表現テスターと常識を使用して「テスト」できます。単体テストを使用して 2 つの変数が等しいかどうかを確認する場合、変数を作成して何かに等しく設定するたびにテストを作成する必要はありませんか? 記事の例は、恣意的なものに思えます。

私の心は、単体テストの利点を学ぶことにオープンですが、単体テストの実用的なアプリケーションは何かを知りたいです。

結論: 私はこれまで単体テストを使用したことがないので、なぜ私が間違っているのか教えてください。テストを使用する必要があります。

乾杯!!

4

1 に答える 1

7

単体テストにより、コーディングが期待を満たしていることを確認できます。単体テストは聖杯ではありません。コードで優れたレベルの精度とモジュール性を実現するために使用できるツールの1つにすぎません。

ユニットテストはあなたの期待です。つまり、テストでは、テスト中のコードを呼び出すか呼び出してから、予想される(または返される)結果に対して結果(戻り値など)を測定します。結果が期待したものと一致しない場合は、テストに問題があるか(期待が間違っていた)、テスト対象のコードが期待どおりに動作していません。

単体テストは、コードをリファクタリングまたは保守するときに特に役立ちます。コードを変更し、単体テストを実行して、変更によってテストが失敗したかどうかを確認できます。

簡潔にするために、単体テストには他の利点もあります。通常は自動化された方法で実行できるはずなので、ナイトリービルドを実行する場合は実行させることができ、朝に結果を確認できます。これは、複数の人がコードを変更または追加する可能性がある大規模なチームで特に役立ちます。単体テストに適した方法でコードを構築すると、アプリを構築する際の分離されたアプローチが増えます。これにより、コードの臭いが減少し、コードの将来の保守性と拡張性が向上します。

編集:

did_earnをテストして、テストケースにハードコーディングしますか。たとえば、user5をパラメータとして手動で渡し(user5は400回ログインしています)、バッジを取得しないようにしますが、user6(500ログイン)はバッジを取得しますか?

はい、それはまさにあなたがすることです。つまり、の内部実装を変更した場合did_earn、テストはそれがまだ期待を満たしているかどうかをすぐに知ることができます(500回のログイン以降でのみtrueが返されます)。強く型付けされていないコード(スクリプト言語など)をテストする場合は、整数などの代わりに文字列を関数に渡した場合に何が起こるかをテストすることも検討する必要があります。

現時点では当てはまらないかもしれませんが、モック、IoC、依存性注入の概念も確認する必要がありますこれらすべて単体テストで頻繁に使用される手法です。

于 2011-05-03T01:15:54.337 に答える