0
0
疑問
ReservationServiceのreserveメソッドを呼び出す際、「ReservationService」のオブジェクトを、モック注入用とモック化用で分けてもいいのでしょうか。
背景
ReservationServiceのreserveメソッドを呼び出すために以下のスタブを作成しました。
doReturn(reservation).when(reservationService).reserve(reservation);
テストを起動すると、「NotAMockException」が発生。
reservationServiceはモックを注入しただけでモックではないため、新たにReservationServiceクラスでモック化した「reservationServ」を用意し、修正。
doReturn(reservation).when(reservationServ).reserve(reservation);
テスト起動後、無事にテスト完了。
該当のソースコード
@ExtendWith(MockitoExtension.class) class ReservationServiceTest { //依存しているオブジェクトのモック作成 @Mock private ReservationRepository reservationRepository; @Mock private Reservation reservation; @Mock private ReservableRoomId reservableRoomId_mock; @Mock private ReservationService reservationServ; private AutoCloseable closeable; //今回テストするクラスにmockを注入 @InjectMocks private ReservationService reservationService; //モックの初期化 @BeforeEach void initService() { closeable = MockitoAnnotations.openMocks(this); } @AfterEach void closeService() throws Exception { closeable.close(); } //予約日の日付を初期化 LocalDate date = LocalDate.of(2025,01,15); //比較用のreservableRoomIdを作成 //reservableRoomIdにはroomIdとreservedDateが設定されている ReservableRoomId reservableRoomId = new ReservableRoomId(1, date); //startTime,endTime LocalTime startTime; LocalTime endTime; //reservationId Integer reservationId; //User User user; @Test @DisplayName("reserveメソッド") public void reserveTest(){ //startTime,endTime startTime = LocalTime.of(17, 00, 00); endTime = LocalTime.of(21, 00, 00); //比較用のreservableRoom 引数はreservableRoomId ReservableRoom reservableRoom = new ReservableRoom(reservableRoomId); //比較用のreservationId reservationId = 83; //Reservationに比較用の予約情報を設定 reservation.setReservationId(reservationId); reservation.setStartTime(startTime); reservation.setEndTime(endTime); reservation.setReservableRoom(reservableRoom); //モックに戻り値を設定。 doReturn(reservation).when(reservationServ) .reserve(reservation); //対象メソッドの実行 Reservation reserve = reservationServ.reserve(reservation); //値の比較 assertEquals(reservation.getReservationId(),reserve.getReservationId()); assertEquals(reservation.getStartTime(),reserve.getStartTime()); assertEquals(reservation.getEndTime(),reserve.getEndTime()); assertEquals(reservation.getReservableRoom(),reserve.getReservableRoom()); // 呼び出しの検証 verify(reservationServ, times(1)) .reserve(reservation); }
回答1件
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。