Browse Source

Mockito (2/2)

master
bart 2 years ago
parent
commit
94283ff399

+ 59
- 0
src/test/java/com/mockitotutorial/happyhotel/booking/Test07VerifyBehaviour.java View File

@@ -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());

}

}

+ 62
- 0
src/test/java/com/mockitotutorial/happyhotel/booking/Test08Spies.java View File

@@ -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);

}



}

+ 52
- 0
src/test/java/com/mockitotutorial/happyhotel/booking/Test09TestingVoidMethods.java View File

@@ -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);
}

}

+ 74
- 0
src/test/java/com/mockitotutorial/happyhotel/booking/Test10ArgumentCaptors.java View File

@@ -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);
}

}

+ 74
- 0
src/test/java/com/mockitotutorial/happyhotel/booking/Test11Annotations.java View File

@@ -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);
}

}

+ 67
- 0
src/test/java/com/mockitotutorial/happyhotel/booking/Test12MockitoBdd.java View File

@@ -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);

}


}

Loading…
Cancel
Save