Я использую MapStruct для сопоставления своих объектов, и я высмеиваю свои объекты с помощью Mockito.
Я хочу протестировать метод, который содержит сопоставление с mapStruct.Проблема в том, что вложенный маппер всегда пуст в моих модульных тестах (хорошо работает в приложении)
это мое объявление маппера:
@Mapper(componentModel = "spring", uses = MappingUtils.class)
public interface MappingDef {
UserDto userToUserDto(User user)
}
это мой вложенный маппер
@Mapper(componentModel = "spring")
public interface MappingUtils {
//.... other mapping methods used by userToUserDto
это метод, который я хочу проверить:
@Service
public class SomeClass{
@Autowired
private MappingDef mappingDef;
public UserDto myMethodToTest(){
// doing some business logic here returning a user
// User user = Some Business Logic
return mappingDef.userToUserDto(user)
}
и это мой модульный тест:
@RunWith(MockitoJUnitRunner.class)
public class NoteServiceTest {
@InjectMocks
private SomeClass someClass;
@Spy
MappingDef mappingDef = Mappers.getMapper(MappingDef.class);
@Spy
MappingUtils mappingUtils = Mappers.getMapper(MappingUtils.class);
//initMocks is omitted for brevity
@test
public void someTest(){
UserDto userDto = someClass.myMethodToTest();
//and here some asserts
}
mappingDef
введен правильно, но mappingUtils
всегда пусто
Отказ от ответственности : это не дубликат этого вопроса .Он использует @Autowire, поэтому он загружает контекст Spring, поэтому он выполняет интеграционные тесты.Я делаю юнит-тесты, поэтому я не использую @ Autowired
Я не хочу делать mappingDef
и mappingUtils
@Mock
, поэтому мне не нужно делать when(mappingDef.userToUserDto(user)).thenReturn(userDto)
в каждом случае использования