luchob/softuni-feb2023

Проблем с unit Test

Closed this issue · 1 comments

https://github.com/ViliIlieva/MyKnitShop

Здравей отново,
да помоля да погледнеш в UserServiceTest testAddMessage, уж успях да направя така че да тествам когато имам принципал, но нещо друго греша , моля за съвет как да се справя с това

luchob commented

Здрасти :-)

Ето какво казва съобщението:

Argument(s) are different! Wanted:
mockMessageRepository.save(
    com.example.myknitshop.models.entity.Message@59429fac
);
-> at com.example.myknitshop.service.UserServiceTest.testAddMessage(UserServiceTest.java:138)
Actual invocations have different arguments:
mockMessageRepository.save(
    com.example.myknitshop.models.entity.Message@57aa341b
);

Забележи различния хеш след обектите -> 59429fac vs 57aa341b.

Това нещо:

        verify(mockMessageRepository, times(1)).save(message);

сравнява с помощта на equals метода. Дали message entity обекта в теста ти (59429fac) е същия като този в създаден в сървиса (57aa341b). Но в сървиса ти създаваш нов message:

        Message message = new Message (); <---!!!!
        message.setAuthor (client);
        message.setDescription (messageDTO.getDescription ());
        this.messageRepository.save (message);

Message нямат custom equals/hash code затова ползват тези на класа Object, т.е. сравнява се по рефърънс на обекта и те не са равни.

Кофти ситуация, но за радост е напълно стандартна. Може да се измъкнеш от нея като например ползваш аргумент matchers. Прочети повече тук -> https://www.baeldung.com/mockito-argument-matchers#custom-argument-matcher

Поздрави,
Л.