单元测试Spring Boot应用程序服务层

时间:2019-10-14 09:18:45

标签: spring-boot unit-testing kotlin

对于Spring Boot提供的测试功能和实用程序,我有些困惑。

我在项目中使用a,并且希望在没有数据库连接的情况下对服务进行单元测试

目前,我将spring-boot-starter-test用于contoller测试套件,并将@WebMvcTest用于所有其他测试类。

但是我在某处读到@SpringBootTest仅用于集成测试...

阅读documentation我不明白建议的服务方法是什么。我应该只在与回购协议集成时对其进行测试吗?

更新

这是我的一项服务的测试类的摘录:

@SpringBootTest

3 个答案:

答案 0 :(得分:2)

与集成测试(启动Spring容器的测试,@SpringBootTest相比)更轻巧,您应该更喜欢实施单元测试来测试业务逻辑(在没有Spring的情况下运行的测试,普通的JUnit测试),因为它们更轻巧,并且可以给您反馈快很多。

引用Spring Boot doc

  

依赖注入的主要优点之一是它应该使您的代码更易于进行单元测试。您可以使用new运算符实例化对象,甚至无需使用Spring。您还可以使用模拟对象代替实际的依赖项。

     

通常,您需要超越单元测试并开始集成测试(使用Spring ApplicationContext)。能够进行集成测试而无需部署应用程序或连接到其他基础结构,这很有用。

答案 1 :(得分:2)

使用@SpringBootTest进行单元测试有点过头了。因为这将启动整个应用程序上下文。

要测试单个(服务)类,我将使用@RunWith(MockitoJUnitRunner.class)@Autowired@MockBean(而不是@Mock@InjectMocks)(如果使用构造函数注入,则不必使用它。这将是更好的选择)

您仍然可以将@Autowired@ContextConfiguration一起使用并加载特定的类(如果传递依赖项不是太多)

如果您不想使用模拟,则可以使用嵌入式数据库并使用@DataMongoTest@DataJpaTest并使用Springboot测试功能。

保持简单。...

答案 2 :(得分:0)

尝试使用Mockito模拟对数据库的调用,或使用h2数据库进行测试