我在springBoot中开发微服务。我正在为服务和DAO层编写单元测试。当我使用**@SpringBootTest时,它会在构建时启动应用程序。但当我运行单元测试时,它不应该启动应用程序。我使用@RunWith(SpringRunner.class),但我无法在junit类中@Autowired类示例。如何配置不应启动应用程序的junit测试类以及如何@Autowired**class instance in junit class.
我在springBoot中开发微服务。我正在为服务和DAO层编写单元测试。当我使用**@SpringBootTest时,它会在构建时启动应用程序。但当我运行单元测试时,它不应该启动应用程序。我使用@RunWith(SpringRunner.class),但我无法在junit类中@Autowired类示例。如何配置不应启动应用程序的junit测试类以及如何@Autowired**class instance in junit class.
4条答案
按热度按时间nmpmafwu1#
如果您不想启动完整的应用程序,请使用MockitoJUnitRunner进行JUnit 5测试。
任何Service、Repository和Interface都可以通过@Mock注解来模仿。
@InjectMocks用于需要测试的Class对象。
这里有个例子。
anhgbhbe2#
使用Sping Boot ,您可以启动a sliced version of your application进行测试。这将创建一个Spring Context,其中仅包含与您的Web层(控制器,过滤器,转换器等)相关的bean的子集:
@WebMvcTest
。有一个类似的注解可以帮助你测试你的DAO,因为它只填充JPA和数据库相关的bean(例如
EntitiyManager
,Datasource
等):@DataJpaTest
.如果你想自动连接一个bean,而这个bean不是由上面的annotatiosn创建的Spring Test Context的一部分,你可以使用
@TestConfiguration
手动添加任何你喜欢的bean到测试上下文中。5sxhfpxr3#
根据你的测试设置,如果你不想自动连接一个mock,而是“真实的东西”,你可以简单地注解你的测试类,以包含你需要的类(如果需要的话,加上它们的传递依赖关系)
例如:
或
或
请参阅此处Spring Boot Web Data JDBC allin中基于JUnit5的工作示例。
uinbv5nw4#
为了避免运行整个应用程序,请包含以下Mockito注解,并exclude
@SpringBootTest
。最后的单元测试是:
(But请注意,如果您有一些应用程序测试属性YAML,您需要
@SpringBootTest
来读取它们-例如application-test.yaml
。在这种情况下,您不能避免@SpringBootTest
。它可以与@Import
一起使用,以导入任何对象的自定义模拟类-例如here。