基本クラスEmployeeから派生したクラスManagerがあり、そのEmployeeにはManagerによって継承されるメソッドgetEmail()があるとします。マネージャーのgetEmail()メソッドの動作が実際に従業員のものと同じであることをテストする必要がありますか?
これらのテストが作成された時点で動作は同じになりますが、もちろん将来のある時点で誰かがこのメソッドをオーバーライドし、その動作を変更して、アプリケーションを中断するかもしれません。しかし、本質的に干渉コードがないことをテストするのは少し奇妙に思えます。
(Manager :: getEmail()メソッドをテストしても、Manager :: getEmail()が作成/オーバーライドされるまで、コードカバレッジ(または他のコード品質メトリック(?))は改善されません。)
(答えが「はい」の場合、基本クラスと派生クラス間で共有されるテストの管理方法に関する情報が役立ちます。)
質問の同等の定式化:
派生クラスが基本クラスからメソッドを継承する場合、継承されたメソッドが次のことを期待しているかどうかをどのように表現(テスト)しますか?
- 現在のベースとまったく同じように動作します(ベースの動作が変更されても、派生メソッドの動作は変更されません)。
- 常にベースとまったく同じように動作します(ベースクラスの動作が変わると、派生クラスの動作も変わります)。または
- ただし、必要に応じて動作します(呼び出さないため、このメソッドの動作は気にしません)。
Manager
クラスを派生させることEmployee
は、最初の大きな間違いでした。