Przejdź do treści
Strona główna » Kurs Java Wrzesień 2022 – [7] mock tests

Kurs Java Wrzesień 2022 – [7] mock tests

  • przez
java, kurs java, spring

Testowanie z Mockito

Naszym zadaniem podczas kurs Java z Great Wrzesień 2022 było stworzenie PULL REQUESTA-a z implementacją i testami serwisu w mockito.

Mockito jest biblioteką , która umożliwia mockowanie zachowania się klas. Tworzone są tak zwane klasy wydmuszki ( mocki ), w których nagrywamy zachowanie klasy, zamiast wykonywać jej realną implementację. Ma to znaczenie, przy większych serwisach, działającymi z innymi serwisami i repozytoriami.

Gdy warstwa niższa jest już przetestowana swoimi testami, nie ma sensu ponawiać tych testów w warstwie wyższej ,jak repository -> service.
W związku z tym, stosujemy mocki korzystając z biblioteki mockito. Rozważmy poniższy kod z PR-a:

@BeforeEach
public void setup() throws Exception {
this.employee = new Employee(FIRST_NAME_TEST, LAST_NAME_TEST, PESEL_TEST, SALARY_TEST);
}

@Test
void create() throws Exception {

//given
when(employeeRepo.create(anyString(), anyString(), anyString(), any(BigDecimal.class))).thenReturn(this.employee);
//when
EmployeeDto employeeDTO = employeeService.create(FIRST_NAME_TEST, LAST_NAME_TEST, PESEL_TEST, SALARY_TEST);
//then
assertNotNull(employeeDTO);
assertEquals(FIRST_NAME_TEST, employeeDTO.getFirstName());
assertEquals(LAST_NAME_TEST, employeeDTO.getLastName());
assertEquals(PESEL_TEST, employeeDTO.getPesel());
assertEquals(SALARY_TEST, employeeDTO.getSalary());
}

Klasa EmployeRepository jest użyta w implementacji metod z klasy EmployeeService i jest ona odpowiednio przetestowana. Testując service nie należy testować jej ponownie, tylko zamokować jej zachowanie przez mockito. To właśnie robi kolejna linijka:

//given
when(employeeRepo.create(anyString(), anyString(), anyString(), any(BigDecimal.class))).thenReturn(this.employee);

W tej linijce mówimy, że jeśli ktoś wywoła metodę employeeRepo.create() z jakimikolwiek parametrami zgodnymi sygnaturą metody, wtedy zawsze zwróci obiekt this.employee.

Gdybyśmy chcieli nagrać więcej zachowań do tej metody, to byśmy musieli bardziej sprecyzować parametry. To właśnie magia mocka!

//when
EmployeeDto employeeDTO = employeeService.create(FIRST_NAME_TEST, LAST_NAME_TEST, PESEL_TEST, SALARY_TEST);

Teraz jesteśmy w stanie sprawdzić, czy z wgranym mockiem klasy repository, metoda serwisu działa poprawnie. Testowana jest więc pozostała zawartość metody, a mock zwraca z góra znaną wartość.

//then
assertNotNull(employeeDTO);
assertEquals(FIRST_NAME_TEST, employeeDTO.getFirstName());
assertEquals(LAST_NAME_TEST, employeeDTO.getLastName());
assertEquals(PESEL_TEST, employeeDTO.getPesel());
assertEquals(SALARY_TEST, employeeDTO.getSalary());


Polecam korzystać z biblioteki mockito —> https://site.mockito.org/

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *