@@ -0,0 +1,59 @@ | |||
package com.mockitotutorial.happyhotel.booking; | |||
import org.junit.jupiter.api.BeforeEach; | |||
import org.junit.jupiter.api.Test; | |||
import java.time.LocalDate; | |||
import static org.junit.jupiter.api.Assertions.assertEquals; | |||
import static org.mockito.Mockito.*; | |||
class Test07VerifyBehaviour { | |||
private BookingService bookingService; | |||
private PaymentService paymentServiceMock; | |||
private RoomService roomServiceMock; | |||
private BookingDAO bookingDAOMock; | |||
private MailSender mailSenderMock; | |||
@BeforeEach | |||
void setup() { | |||
paymentServiceMock = mock(PaymentService.class); | |||
roomServiceMock = mock(RoomService.class); | |||
bookingDAOMock = mock(BookingDAO.class); | |||
mailSenderMock = mock(MailSender.class); | |||
bookingService = new BookingService(paymentServiceMock, roomServiceMock, bookingDAOMock, mailSenderMock); | |||
} | |||
@Test | |||
void should_CalculateCorrectPrice_When_CorrectInput() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),4, true); | |||
//when | |||
bookingService.makeBooking(bookingRequest); | |||
//then | |||
//verify(paymentServiceMock).pay(bookingRequest,400); | |||
//verify(paymentServiceMock,times(1)).pay(bookingRequest,400); | |||
verify(paymentServiceMock,times(1)).pay(any(),eq(800.0)); | |||
verifyNoMoreInteractions(paymentServiceMock); | |||
} | |||
@Test | |||
void should_NotInvokePayment_When_Not_Prepaid() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),4, false); | |||
//when | |||
bookingService.makeBooking(bookingRequest); | |||
//then | |||
verify(paymentServiceMock,never()).pay(any(),anyDouble()); | |||
} | |||
} |
@@ -0,0 +1,62 @@ | |||
package com.mockitotutorial.happyhotel.booking; | |||
import org.junit.jupiter.api.BeforeEach; | |||
import org.junit.jupiter.api.Test; | |||
import java.time.LocalDate; | |||
import static org.mockito.Mockito.*; | |||
class Test08Spies { | |||
private BookingService bookingService; | |||
private PaymentService paymentServiceMock; | |||
private RoomService roomServiceMock; | |||
private BookingDAO bookingDAOMock; | |||
private MailSender mailSenderMock; | |||
@BeforeEach | |||
void setup() { | |||
paymentServiceMock = mock(PaymentService.class); | |||
roomServiceMock = mock(RoomService.class); | |||
bookingDAOMock = spy(BookingDAO.class); | |||
mailSenderMock = mock(MailSender.class); | |||
bookingService = new BookingService(paymentServiceMock, roomServiceMock, bookingDAOMock, mailSenderMock); | |||
} | |||
@Test | |||
void should_MakeBooking_When_InputOk() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),4, true); | |||
//when | |||
String bookingId = bookingService.makeBooking(bookingRequest); | |||
//then | |||
verify(bookingDAOMock).save(bookingRequest); | |||
System.out.println(bookingId); | |||
} | |||
@Test | |||
void should_CancelBooking_When_InputOK() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),4, true); | |||
bookingRequest.setRoomId("1.3"); | |||
String bookingId ="1"; | |||
doReturn(bookingRequest).when(bookingDAOMock).get(bookingId); | |||
//When | |||
bookingService.cancelBooking(bookingId); | |||
//Then | |||
verify(bookingDAOMock).delete(bookingId); | |||
} | |||
} |
@@ -0,0 +1,52 @@ | |||
package com.mockitotutorial.happyhotel.booking; | |||
import org.junit.jupiter.api.BeforeEach; | |||
import org.junit.jupiter.api.Test; | |||
import org.junit.jupiter.api.function.Executable; | |||
import java.time.LocalDate; | |||
import static org.junit.jupiter.api.Assertions.assertThrows; | |||
import static org.mockito.ArgumentMatchers.any; | |||
import static org.mockito.Mockito.*; | |||
class Test09TestingVoidMethods { | |||
private BookingService bookingService; | |||
private PaymentService paymentServiceMock; | |||
private RoomService roomServiceMock; | |||
private BookingDAO bookingDAOMock; | |||
private MailSender mailSenderMock; | |||
@BeforeEach | |||
void setup() { | |||
paymentServiceMock = mock(PaymentService.class); | |||
roomServiceMock = mock(RoomService.class); | |||
bookingDAOMock = mock(BookingDAO.class); | |||
mailSenderMock = mock(MailSender.class); | |||
bookingService = new BookingService(paymentServiceMock, roomServiceMock, bookingDAOMock, mailSenderMock); | |||
} | |||
@Test | |||
void should_ThrowException_When_MailNotReady() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,8), | |||
LocalDate.of(2021,7,18),2, false); | |||
/* | |||
when(roomServiceMock.findAvailableRoomId(any())) | |||
.thenThrow(BusinessException.class); | |||
*/ | |||
doThrow(new BusinessException()).when(mailSenderMock).sendBookingConfirmation(any()); | |||
//when | |||
Executable executable = () -> bookingService.makeBooking(bookingRequest); | |||
//then | |||
assertThrows(BusinessException.class,executable); | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
package com.mockitotutorial.happyhotel.booking; | |||
import org.junit.jupiter.api.BeforeEach; | |||
import org.junit.jupiter.api.Test; | |||
import org.mockito.ArgumentCaptor; | |||
import java.time.LocalDate; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import static org.junit.jupiter.api.Assertions.assertEquals; | |||
import static org.mockito.Mockito.*; | |||
class Test10ArgumentCaptors { | |||
private BookingService bookingService; | |||
private PaymentService paymentServiceMock; | |||
private RoomService roomServiceMock; | |||
private BookingDAO bookingDAOMock; | |||
private MailSender mailSenderMock; | |||
private ArgumentCaptor<Double> doubleCaptor; | |||
//private ArgumentCaptor<BookingRequest> bookingRequestCaptor; | |||
@BeforeEach | |||
void setup() { | |||
paymentServiceMock = mock(PaymentService.class); | |||
roomServiceMock = mock(RoomService.class); | |||
bookingDAOMock = mock(BookingDAO.class); | |||
mailSenderMock = mock(MailSender.class); | |||
bookingService = new BookingService(paymentServiceMock, roomServiceMock, bookingDAOMock, mailSenderMock); | |||
this.doubleCaptor = ArgumentCaptor.forClass(Double.class); | |||
} | |||
@Test | |||
void should_PayCorrectPrice_When_InputOk() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),2, true); | |||
double expected = 400.0; | |||
//when | |||
bookingService.makeBooking(bookingRequest); | |||
//then | |||
verify(paymentServiceMock,times(1)).pay(any(),doubleCaptor.capture()); | |||
double actual = doubleCaptor.getValue(); | |||
assertEquals(expected, actual); | |||
} | |||
@Test | |||
void should_PayCorrectPrice_When_MultipleCalls() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),2, true); | |||
BookingRequest bookingRequest2 = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),4, true); | |||
List<Double>expected = Arrays.asList(400.0,800.0); | |||
//when | |||
bookingService.makeBooking(bookingRequest); | |||
bookingService.makeBooking(bookingRequest2); | |||
//then | |||
verify(paymentServiceMock,times(2)).pay(any(),doubleCaptor.capture()); | |||
List<Double> actual = doubleCaptor.getAllValues(); | |||
assertEquals(expected, actual); | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
package com.mockitotutorial.happyhotel.booking; | |||
import org.junit.jupiter.api.BeforeEach; | |||
import org.junit.jupiter.api.Test; | |||
import org.junit.jupiter.api.extension.ExtendWith; | |||
import org.mockito.*; | |||
import org.mockito.junit.jupiter.MockitoExtension; | |||
import java.time.LocalDate; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import static org.junit.jupiter.api.Assertions.assertEquals; | |||
import static org.mockito.Mockito.*; | |||
@ExtendWith(MockitoExtension.class) | |||
class Test11Annotations { | |||
@InjectMocks | |||
private BookingService bookingService; | |||
@Mock | |||
private PaymentService paymentServiceMock; | |||
@Mock | |||
private RoomService roomServiceMock; | |||
@Spy | |||
private BookingDAO bookingDAOMock; | |||
@Mock | |||
private MailSender mailSenderMock; | |||
@Captor | |||
private ArgumentCaptor<Double> doubleCaptor; | |||
@Test | |||
void should_PayCorrectPrice_When_InputOk() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),2, true); | |||
double expected = 400.0; | |||
//when | |||
bookingService.makeBooking(bookingRequest); | |||
//then | |||
verify(paymentServiceMock,times(1)).pay(any(),doubleCaptor.capture()); | |||
double actual = doubleCaptor.getValue(); | |||
assertEquals(expected, actual); | |||
} | |||
@Test | |||
void should_PayCorrectPrice_When_MultipleCalls() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),2, true); | |||
BookingRequest bookingRequest2 = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),4, true); | |||
List<Double>expected = Arrays.asList(400.0,800.0); | |||
//when | |||
bookingService.makeBooking(bookingRequest); | |||
bookingService.makeBooking(bookingRequest2); | |||
//then | |||
verify(paymentServiceMock,times(2)).pay(any(),doubleCaptor.capture()); | |||
List<Double> actual = doubleCaptor.getAllValues(); | |||
assertEquals(expected, actual); | |||
} | |||
} |
@@ -0,0 +1,67 @@ | |||
package com.mockitotutorial.happyhotel.booking; | |||
import org.junit.jupiter.api.Test; | |||
import org.junit.jupiter.api.extension.ExtendWith; | |||
import org.mockito.*; | |||
import org.mockito.junit.jupiter.MockitoExtension; | |||
import java.time.LocalDate; | |||
import java.util.Arrays; | |||
import java.util.Collections; | |||
import java.util.List; | |||
import static org.mockito.BDDMockito.*; | |||
import static org.junit.jupiter.api.Assertions.assertEquals; | |||
import static org.mockito.Mockito.*; | |||
@ExtendWith(MockitoExtension.class) | |||
class Test12MockitoBdd { | |||
@InjectMocks | |||
private BookingService bookingService; | |||
@Mock | |||
private PaymentService paymentServiceMock; | |||
@Mock | |||
private RoomService roomServiceMock; | |||
@Spy | |||
private BookingDAO bookingDAOMock; | |||
@Mock | |||
private MailSender mailSenderMock; | |||
@Captor | |||
private ArgumentCaptor<Double> doubleCaptor; | |||
@Test | |||
void should_CountAvailablePlaces_When_OneRoomAvailable() { | |||
//given | |||
given(roomServiceMock.getAvailableRooms()) | |||
.willReturn(Collections.singletonList(new Room("Room2", 2))); | |||
int expected = 2; | |||
//when | |||
int actual = bookingService.getAvailablePlaceCount(); | |||
//then | |||
assertEquals(expected,actual); | |||
} | |||
@Test | |||
void should_CalculateCorrectPrice_When_CorrectInput() { | |||
//given | |||
BookingRequest bookingRequest = new BookingRequest("1", LocalDate.of(2021,7,1), | |||
LocalDate.of(2021,7,5),4, true); | |||
//when | |||
bookingService.makeBooking(bookingRequest); | |||
//then | |||
then(paymentServiceMock).should(times(1)).pay(any(),eq(800.0)); | |||
verifyNoMoreInteractions(paymentServiceMock); | |||
} | |||
} |