用于扩展组件的服务的Spring Boot测试配置

时间:2018-12-31 18:21:08

标签: spring-boot junit mockito spring-boot-test

我正在尝试在Spring Boot中为我的服务层进行一些测试。

这对于正常服务非常有用:

@RunWith(SpringRunner.class)
public class ThreadSystemServiceImplTest {
    /**
     * This configures this test so that the correct implementation is tested
     */
    @TestConfiguration
    static class ThreadSystemServiceImplTestContextConfiguration {

        @Bean
        public ThreadSystemService testService() {
            return new ThreadSystemServiceImpl();
        }
    }

    @Autowired
    private ThreadSystemService service;

    @MockBean
    private ThreadSystemRepository repository;

    ...
}

但是,我现在已经设置了这样的服务:

@Service
@Transactional
public class DrawingServiceImpl extends DrawingFunctions implements DrawingService {
    ....
}

DrawingFunctions具有:

@Component
public class DrawingFunctions extends ToDoFunctions {
    /**
     * Logging Manager
     */
    private static final Logger LOGGER=LogManager.getLogger();

    @Autowired
    private CommodityPartPORepository cppoRepository;

    @Autowired
    private WorkOrderService woService;

    @Autowired
    private InventorySearch inventorySearch;

    ...
}

当我尝试运行测试时,我从扩展类(例如WorkOrderServiceInventorySearch)中得到关于没有合格bean的错误。扩展类之一也有

@PersistenceContext
private EntityManager em;

这似乎会带来更多问题。

我可以在测试配置中设置Bean,就像工作示例中的ThreadSystemService的Bean一样。但是,这将是一个非常详尽的列表,这些测试几乎不需要引用所有的列表。有没有办法不为特定测试包括扩展类,还是有一种简便的方法来设置这种测试?

1 个答案:

答案 0 :(得分:0)

您可以使用@DataJpaTest而不是@PersistenceContext来使用测试EntityManager

Documentation DataJpaTest