对于Spring Boot提供的测试功能和实用程序,我有些困惑。
我在项目中使用a
,并且希望在没有数据库连接的情况下对服务进行单元测试
目前,我将spring-boot-starter-test
用于contoller测试套件,并将@WebMvcTest
用于所有其他测试类。
但是我在某处读到@SpringBootTest
仅用于集成测试...
阅读documentation我不明白建议的服务方法是什么。我应该只在与回购协议集成时对其进行测试吗?
更新
这是我的一项服务的测试类的摘录:
@SpringBootTest
答案 0 :(得分:2)
与集成测试(启动Spring容器的测试,@SpringBootTest
相比)更轻巧,您应该更喜欢实施单元测试来测试业务逻辑(在没有Spring的情况下运行的测试,普通的JUnit测试),因为它们更轻巧,并且可以给您反馈快很多。
依赖注入的主要优点之一是它应该使您的代码更易于进行单元测试。您可以使用new运算符实例化对象,甚至无需使用Spring。您还可以使用模拟对象代替实际的依赖项。
通常,您需要超越单元测试并开始集成测试(使用Spring ApplicationContext)。能够进行集成测试而无需部署应用程序或连接到其他基础结构,这很有用。
答案 1 :(得分:2)
使用@SpringBootTest
进行单元测试有点过头了。因为这将启动整个应用程序上下文。
要测试单个(服务)类,我将使用@RunWith(MockitoJUnitRunner.class)
和@Autowired
和@MockBean
(而不是@Mock
和@InjectMocks
)(如果使用构造函数注入,则不必使用它。这将是更好的选择)
您仍然可以将@Autowired
与@ContextConfiguration
一起使用并加载特定的类(如果传递依赖项不是太多)
如果您不想使用模拟,则可以使用嵌入式数据库并使用@DataMongoTest
或@DataJpaTest
并使用Springboot测试功能。
保持简单。...
答案 2 :(得分:0)
尝试使用Mockito模拟对数据库的调用,或使用h2数据库进行测试