存储库对服务的依赖关系不令人满意

时间:2019-11-07 09:59:26

标签: java spring spring-boot junit junit5

我想实现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.

1 个答案:

答案 0 :(得分:0)

如果要测试BinCountryCheckFilterImpl,则需要@Autowire RiskFilterService,因为它是BinCountryCheckFilterImpl的依赖项。您打算将此作为集成测试还是单元测试?

相关问题