前提
既存システムの単体試験をしています。
実装から参画したため、前任者の設計書通りに実装しテストに移ったわけですが、スケジュールの都合上しっかりソースを読める時間がなく、取り掛かったという背景があります。
ちょっと僕の経験内では想定外の既存実装がありまして、タイトルの通りコンパイル上はデッドコードにはならないものの、改修したのに通せない箇所が出てきました。
継承についてなのですが、めちゃくちゃ知見が深いわけではないので、これってどういうこと?つまりどうなるの?的なところをご教示いただけたらと思います・・・。
該当のソースコード
Java
1public class aLogic() { 2 public void execute() { 3 aDao dao = new aDao(); 4 String hoge = dao.selectHoge(param) 5 } 6} 7 8public class aDao { 9 public String selectHoge(param) { 10 // 処理 11 } 12}
ここまではごく一般的な流れだと思います。
別の起動プロセスから動く以下のコード・・・
Java
1public class bLogic() { 2 public void execute() { 3 aDao dao = new bDao(); 4 String hoge = dao.selectHoge(param) 5 } 6} 7 8public class bDao extends aDao { 9 public String selectHoge(param) { 10 // 処理 11 } 12}
上記のように、別の起動プロセスを経て動くbLogicがDaoのインスタンス生成時にaDaoを、aDaoを継承したbDaoでnewするといったことになっています。。。
aDao、bDaoどちらのselectHogeも全く同じ処理をしているため、同様に改修したのですが、bLogicから飛ぶのはaDaoのselectHoge。
bDaoのselectHogeが別のところから参照されていればいいのですが、当該メソッド以外では呼び出されておりません。(何ならbDao自体、このインスタンス生成時以外使用されていない・・・)
聞きたい事
class単位でのテストは可能ですが、一連の処理の流れをテストしたいとき、まあどうやってもbDaoのselectHogeに突入することなく、aDaoの方に行ってしまうので、改修したbDaoのselectHogeに到達できず、といったところです。
継承の基本的なところについては理解しているつもりですが、このような使い方を今までにしたことがないので、戸惑っております。
これがどうしてもスタンダードな処理だとは、思えないのですが。
インスタンス生成の時点でおかしなことやってるから**「通らない / 通ってない」って判定で正しいのでしょうか?
それとも継承という観点からみると、処理内容が全く同じであるなら、「通っている」**という判定になるなんてことまさかまさかであったりしますか?
愚問なのかもしれませんが、ご教示頂けますよう、よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
Java6
