私の新しい仕事でのテストは、私が以前に遭遇したテストとはまったく異なります。
彼らがユニットテストを書いているとき(おそらくコードの前に)、彼らは「When」で始まるクラスを作成します。名前は、テストが実行されるシナリオ(フィクスチャ)を表します。コードを介して、ブランチごとにサブクラスを作成します。クラス内のすべてのテストは「should」で始まり、実行後にコードのさまざまな側面をテストします。そのため、各モック(DOC)が正しく呼び出されていることを確認し、該当する場合は戻り値を確認するためのメソッドがあります。この方法は、テストごとにまったく同じ実行コードが実行されていることを意味し、これは無駄に思えるため、少し混乱しています。彼らが適応したかもしれないこれに似た技術があるかどうか疑問に思いました。スタイルとそれがどのように実装されることになっているのかを説明するリンクは素晴らしいでしょう。
また、SUTを「実行」するための繰り返しの呼び出しをセットアップメソッドに移動したことにも気づきました。これにより、例外を予期しているときに問題が発生します。これは、チェックを実行するための組み込みツール(PythonユニットテストのassertRaises)を使用できないためです。これは、戻り値をテストクラスのバッキングフィールドとして格納することも意味します。また、モックの多くをバッキングフィールドとして保存する必要があります。クラス階層全体で、各モックの構成を区別することが困難になります。
また、コードのテスト方法も少し異なります。それは本当に彼らが統合テストと考えるものに帰着します。それらは、テストされている関数からコンテキストを奪うものをすべてモックアウトします。これは、同じクラス内のプライベートメソッドを意味する場合があります。私は常に、データベース、ファイルシステム、日付など、テストの結果に影響を与える可能性のあるリソースにモックを制限してきました。このアプローチにはいくつかの価値があります。ただし、現在の使用方法では、脆弱なテスト(コードを変更するたびに失敗するテスト)につながることがわかります。統合テストがないと、この場合、サードパーティのAPIを誤って使用している可能性がありますが、単体テストは引き続き合格するため、心配しています。このアプローチについてももっと知りたいです。
したがって、これらのアプローチのいくつかについてさらに学ぶ場所に関するリソースがあれば便利です。彼らが物事をやっている方法を理解していないという理由だけで、私は素晴らしい学習の機会を逃したくありません。また、これらのアプローチのネガティブな点に焦点を当てるのをやめ、メリットがどこにあるのかを見ていきたいと思います。