質問: 9; } } private void write(Logger logger, String logLevel, String msg) throws Throwable { switch(logLevel) { case "D": logger.debug(msg); break; case "I": logger.info(msg); break; case "W": logger.warn(msg); break; case "E": logger.error(msg); break; } } } ``` ### 試したこと Jmockitでやったのですが、方法がわかりませんでした。 ### 補足情報(FW/ツールのバージョンなど) Jmockit 1.47 バージョンにはこだわりません。 Jmockitにもこだわりません。
回答: privateなメソッドじゃなくて、Loggerをモックにすればいいだけでは。 LoggerインスタンスがoutPutLogメソッド呼び出し時に毎度生成される作りをやめて(例えばコンストラクタで初期化されるようにして)、依存性の注入でモックに差し替えられればテストできると思います。 一番簡単なのはテスト用にコンストラクタを別途作って、モックオブジェクトを使ってフィールドにしたLoggerを初期化する方法(コンストラクタインジェクション)ですが。(実コードから使う引数なしのコンストラクタでは普通にLoggerのフィールドを今までどおりのクラスで初期化する)