Testy z DTO do Encji

0

Cześć
Muszę przetestować metodę, która jako argument przyjmuje EmployeeDTO, tworzy nową instancję klasy(encji) Employee i zwraca tą encję. Jest to moja pierwsza przygoda z testami i trochę zgłupiałem. Oczywiście test przechodzi efekt negatywny, a nie wiem jak to zrobić aby stał się pozytywny. Mógłby ktoś podpowiedzieć rozwiązanie? Z góry dzięki :)

@Mock
EmployeeDAO employeeDAO;

@InjectMocks 
EmployeeService employeeService;

@Test
    public void testDtoToEntity() {
        /// / Setup
        final EmployeeDTO object = new EmployeeDTO();
        object.setId(1);
        object.setStreet("uuu");
        object.setCity("uuu");
        object.setDateOfBirth(LocalDate.now());
        object.setName("uuu");
        final User expectedResult = new User();
        expectedResult.setId(1);
        expectedResult.setStreet("uuu");
        expectedResult.setCity("uuu");
        expectedResult.setDateOfBirth(LocalDate.now());
        expectedResult.setName("uuu");

        final Employee result = employeeServiceUnderTest.dtoToEntity(object);

        assertEquals(expectedResult, result);
    }
0

Luźna myśl: nadpisałeś metodę equals w tym Twoim DTO?

0

Pokazuję również oryginalną metodę z EmployeeService:

@Override
    public Employee dtoToEntity(EmployeeDTO dto) {

        Employee employee = new Employee();
        employee.setName(dro.getName());
        employee.setDateOfBirth(dto.getDateOfBirth());
        employee.setStreet(dto.getStreet());
        employee.setCity(dto.getCity());
       
        return employee;
    }
0

Porównujesz obiekt typu User z obiektem typu Employee. To już wskazuje, że nie będzie łatwo.
Pewnie co więcej nie masz też tam metody equals napsianej. (w User).

Tak przy okazji... wiesz po co Ci w ogóle to DTO? Czy koledzy kazali, bo to full profeska ?

0

Oczywiście sorki wielkie - porównuję EmployeeDTO z Employee.
W linijce wkradł mi się błąd - zamiast :

        final User expectedResult = new User();

wkradł powinno być

        final Employee expectedResult = new Employee();

Co nie zmienia faktu, że i tak nie przechodzi testu. Chciałem zrobić pełną profeskę i spróbować z DTO :P A niestety trochę czas nagli i nie chcę zbytnich zmian w projekcie robić. Przepraszam za zmyłkę :-/

0

I w DTO jak widać nie mam nadpisanej metody equals

1

Nie ma equals to nie będzie działać.
Na twoim poziomie odpuśiłbym sobie te DTO.
Takie DTO co mapuje 1 do 1 wszystkie pola z Entity i do tego jest jeszcze Java Beanem (tfu...) jest gorszwe nawet niż zwykła encja na twarz. Nie daje prawie żadnych korzyści, a tylko wprowadza mnóstwo pułapek i dużo nonsensownej pracy.

0

W tej klasie faktycznie DTO mapuję do encji w skali 1:1, natomiast w innych klasach DTO pełni faktycznie przydatniejsze funkcje.
Nadpisałem i w encjach i w DTO metody equals i hashCode i nadal to samo jest.

0

1.pokaż te equals to się wypowiemy
2. Kolejnym błędem jest użycie localdate.now()

1 użytkowników online, w tym zalogowanych: 0, gości: 1