同僚と私は現在、レガシー Java EE5 コードベースに単体テストを導入しています。主に JUnit と Mockito を使用しています。テストを作成する過程で、EJB のいくつかのメソッドは一度に多くのことを実行するため、テストが難しいことに気付きました。
私はテストビジネス全体にかなり慣れていないので、コードまたはテストをより適切に構造化する方法についての洞察を探しています。私の目標は、頭を悩ませることなく良いテストを書くことです。
これは、メッセージ キューを管理するサービスでのメソッドとその論理ステップの 1 つの例です。
消費メッセージ
確認する以前にダウンロードされたメッセージ
getNewUnreadMessages
addExtraMessages (やや複雑な条件による)
markMessagesAsDownloaded
serializeMessageObjects
現在、最上位のメソッドはインターフェイスで公開されていますが、すべてのサブメソッドは非公開です。私が理解している限り、プライベート メソッドのテストを開始するのは悪い習慣です。パブリック インターフェイスだけが問題になるはずです。
私の最初の反応は、すべてのサブメソッドを公開してそれらを個別にテストすることでした。次に、トップレベルのメソッドでサブメソッドを呼び出すことを確認してください。しかし、同僚は、これらすべての低レベルのメソッドを他のメソッドと同じレベルで公開するのは良い考えではないかもしれないと述べました。混乱を引き起こし、他の開発者がトップレベルを使用する必要があるときに使用し始める可能性があるためです。 1。私は彼の主張を責めることはできない.
だからここにいます。
簡単にテストできる低レベルのメソッドを公開することと、インターフェイスが乱雑になるのを避けることをどのように調整しますか? この場合、EJB インターフェイスです。
依存性注入を使用するか、単一責任の原則に従う必要があるという他の単体テストの質問を読みましたが、実際に適用するのに問題があります。上記の例のメソッドにそのようなパターンを適用する方法について、誰かが指針を持っていますか?
他の一般的な OO パターンまたは Java EE パターンをお勧めしますか?