Проблем с unit Test
Closed this issue · 1 comments
https://github.com/ViliIlieva/MyKnitShop
Здравей отново,
да помоля да погледнеш в UserServiceTest testAddMessage, уж успях да направя така че да тествам когато имам принципал, но нещо друго греша , моля за съвет как да се справя с това
Здрасти :-)
Ето какво казва съобщението:
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
Поздрави,
Л.