存储库到服务的依赖关系不满足



我想实现JUnit 5测试,以便测试服务:

JPA存储库:

@Repository
public interface RiskFilterRepository extends JpaRepository<RiskFilters, Integer> {
.....
}

服务接口:

public interface RiskFilterService {
......
}

服务实现:

@Service
@Qualifier("riskFilterService")
@Transactional
public class RiskFilterServiceImpl implements RiskFilterService {
@PersistenceContext
private EntityManager entityManager;
@Autowired
private RiskFilterRepository dao;
...
}

测试服务:

@Service
public class BinCountryCheckFilterImpl {
@Autowired
@Qualifier("riskFilterService")
private RiskFilterService riskFilterService;
public void validateBinCountryCheckFilter() throws JAXBException, JsonProcessingException {
......
}
}

JUnit测试

@RunWith(SpringRunner.class)
@EnableJpaRepositories(basePackages = {"org.datalis.plugin.service.RiskFilterRepository"})
@SpringBootTest(classes = { RiskFilterServiceImpl.class, RiskFilterService.class } )
@ContextConfiguration(classes = { H2TestProfileJPAConfig.class })
@Transactional
@EnableTransactionManagement
@EntityScan(basePackages = {"org.entity"})
public class BinCountryCheckFilterImplTest    {
@Autowired
@Qualifier(value = "entityManager")
EntityManager manager;
@Autowired
private RiskFilterRepository repository;
@BeforeEach
public void beforeEachTest() throws IOException {
MockitoAnnotations.initMocks(this); 
}
@Test
public void testBinCountryCheckFilterImpl() throws JsonProcessingException, JAXBException {
....
}    
}

当我运行代码时,我得到:

Error creating bean with name 'riskFilterServiceImpl': Unsatisfied dependency expressed through field 'dao'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.datalis.plugin.service.RiskFilterRepository' available: expected at least 1 bean which qualifies as autowire candidate.

完整错误堆栈:https://pastebin.com/84D0v6EQ

你知道如何解决这个问题吗?

编辑:我试过这个:

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class BinCountryCheckFilterImplTest    {
@Autowired
@Qualifier(value = "entityManager")
EntityManager manager;
@Autowired
private RiskFilterRepository repository;
@BeforeEach
public void beforeEachTest() throws IOException {
MockitoAnnotations.initMocks(this); 
}
@Test
public void testBinCountryCheckFilterImpl() throws JsonProcessingException, JAXBException {
....
}    
}

当我运行JUnit代码时,我得到了这个错误:

Could not detect default configuration classes for test class [org.datalis.rest.api.server.filter.bincountrycheck.BinCountryCheckFilterImplTest]: BinCountryCheckFilterImplTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.

如果您正在测试BinCountryCheckFilterImpl,那么您需要@Autowire RiskFilterService,因为它是BinCountryCheckFilter Impl的依赖项。您打算将其作为集成测试还是单元测试?

最新更新