は、私はJUnitのテストを書き込もうとしています方法です:私がテストしたいJunitを使用してLogback Logステートメントが呼び出されたことをテストしますか?以下
方法:
//logger declared outside of method in Class
private static Logger LOGGER = LoggerFactory.getLogger(PersonService.class);
public void showOutputOfIdentifications(int age) {
if(age>25){
LOGGER.info("Over 25");
}else{
LOGGER.info("25 or Under");
}
}
どのように私は正しいLogback
ログ文が呼び出されていることを確認するためにテストすることができます?
私のテストでは、logger
を模擬して呼び出されたことを確認しようとしましたが、これは機能しませんでしたか?
現在のテストの試み:
@Test
public void testShowOutputOfIdentifications() throws ParseException{
int age = 10;
Logger LOGGER_mock = mock(Logger.class);
//call method under test
showOutputOfIdentifications(age);
verify(LOGGER_mock).info("25 or under");
}
現在の失敗テスト出力:
Wanted but not invoked:
logger.info(
"25 or under "
);
Actually, there were zero interactions with this mock.
テスト対象のクラスには、おそらくスタティックロガーLOGGERが使用されています。あなたはそのロガーとしてモックを注入する必要があります。別のロガーを作成しても、それは呼び出されません。 – Fildor
ありがとう、私は静的なロガーを表示する元のメソッドを編集しました# – java123999
ポイントは:あなたが**制御する必要があります**あなたの "テスト中のコード"が使用しているオブジェクト。あなたのためにオブジェクトを作成するファクトリがあれば、そのオブジェクトはテスト中のクラス内で割り当てられます。あなたはコントロールがありません。 – GhostCat