Slide 30
Slide 30 text
単体テストをしやすくする工夫
30
staticなメソッドの呼び出しをDIに置き換える
• 日付取得やログ出力処理などのstaticなメソッドの呼び出しはテストが面倒になる。
• Bean化してDIすることでテストをしやすくする
@Component
public class LocalDateTimeService {
public LocalDateTime now() {
return LocalDateTime.now();
}
}
public class JobInteractor {
private JobRepository jobRepository;
private LocalDateTimeService localDateTimeService;
public JobInteractor(
JobRepository jobRepository,
LocalDateTimeService localDateTimeService) {
this.jobRepository = jobRepository;
this.localDateTimeService = localDateTimeService;
}
public boolean isPublic(String id) {
Job job = jobRepository.find(id).get();
// 公開終了日時 > 現在日時
return job.getPublicationEndDate().isAfter(
localDateTimeService.now());
}
}
@Test
@DisplayName("公開終了日時 > 現在日時 のときtrue")
void 公開終了日時の前ならtrueを返す() {
String id = "123";
Job job = new Job();
job.setPublicationEndDate(
LocalDateTime.of(2023, 6, 4, 16, 00, 01));
given(jobRepository.find(id)).willReturn(job);
given(localDateTimeService.now())
.willReturn(LocalDateTime.of(2023, 6, 4, 16, 00, 00));
boolean actual = jobInteractor.isPublic(id);
assertTrue(actual);
}
テスト対象コード テストコード
LocalDateTimeのBean