Я разрабатываю приложение Spring Boot, следуя методологии TDD. Я создал основные классы (контроллер, сервис и репозиторий) следующим образом:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class CrimeServiceImpl implements CrimeService{
@Autowired
private CrimeRepository repository;
...
Контроллер:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CrimeController {
@Autowired
private CrimeServiceImpl service = new CrimeServiceImpl();
Repository:
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CrimeRepository extends JpaRepository<Crime, Long>{
}
Это структура проекта:
Если я запускаю приложение нормально, ошибок нет. Методы классов пусты. Затем я создал тестовый класс, подобный этому:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = CrimeServiceImpl.class)
@ComponentScan("com.springmiddleware")
@AutoConfigureMockMvc
@SpringBootTest
public class TestCrimeService {
//Calling method getAllCrimes works
@Test
public void returnAllCrimesExists() throws NoSuchMethodException, SecurityException {
List<Crime> list = new ArrayList<>();
assertTrue(this.service.getAllCrimes() == list);
}
И если я запускаю это, отображается следующая ошибка, и тест не проходит:
NoSuchBeanDefinitionException: No qualifying bean of type 'com.springmiddleware.repository.CrimeRepository' available: expected at least 1 bean which qualifies as autowire candidate.
Я проверил все аннотации, и мне кажется, что все в порядке, и я подумал, что если я что-то пропустил, даже при нормальном запуске приложение не будет работать. Что я не так понял?