Прежде всего, вы забыли добавить объект предостережение в список предостережения . Но кроме этого вы смешиваете юнит-тест с интеграционным тестом.
Вам необходимо аннотировать свой тестовый класс с помощью @ RunWith (MockitoJUnitRunner.class) ,
или
Вам необходимо аннотировать ваши фиктивные объекты с помощью @ MockBean и добавить @Autowired в ваш объект класса DataServiceImpl класса тестирования.
Теперь позвольте мне объяснить вам.
Модульный тест
Если вы хотите написать модульный тест, вы не должны использовать контекст приложения (автопровод).
По Кстати, лучшим подходом является аннотирование DataServiceImpl с помощью @RequiredArgsConstructor из Lombok и удаление @Autowired из CautionRepository. Это позволит вам создать экземпляр DataServiceImpl в методе установки в вашем модульном тесте.
Ваш класс DataServiceImpl должен быть:
@Service
@RequiredArgsConstructor
public class DataServiceImpl implements DataService{
private final CautionRepository cautionRepository;
@Override
public void addCautions(List<CautionsDTO> cautions, Contrat contrat) {
// your code...
}
}
, а новый класс модульного теста:
@RunWith(MockitoJUnitRunner.class)
public class DataServiceImplTest{
private DataServiceImpl dataService;
@Mock
private CautionRepository cautionRepository;
@Before
public void setup() {
dataService = new DataServiceImpl(cautionsRepository);
}
@Test
public void addListCautionsTest() {
// your test code...
}
}
Интеграционный тест
Теперь, если вы хотите создать интеграционный тест , используйте @ RunWith (SpringRunner.class) . При этом ваш прикладной контекст будет загружен. В вашем случае вы можете создать фиктивный бин внутри контекста, пометив свой объект с помощью @ MockBean . Это вставит макетированный объект в ваш контекст и автоматически подключится к вашему реальному классу.
Для этого ваш новый класс DataServiceImpl может остаться таким же, как указано выше. Но измените ваш интеграционный тест на:
@RunWith(SpringRunner.class)
public class DataServiceImplTest{
@Autowired
private DataServiceImpl dataService;
@MockBean // it will be injected automatically
private CautionRepository cautionRepository;
@Test
public void addListCautionsTest() {
// your test code...
}
}
Надеюсь, теперь вы понимаете разницу и ошибку, которую вы делали :) 1050 *