在 Spring Webflux 响应式项目中何时使用和不使用 @Mock 注解、@MockBean 注解、@InjectMock 注解和 @Autowired 注解

San*_*ash 11 java spring springmockito project-reactor spring-webflux

您能否解释一下何时使用以下注释以及何时不使用这些注释。我对测试框架还很陌生,并且对网络上的所有答案感到困惑。

@Mock
private Resource resource;
@MockBean
private Resource resource;
@InjectMock
private ProductService productService; 
@AutoWired
Private ProductRepository productRepo;
Run Code Online (Sandbox Code Playgroud)

Joh*_*der 19

@嘲笑

用于使 Mockito 创建一个模拟对象。

@InjectMock

当您希望 Mockito 创建对象的实例并使用注释为 的模拟@Mock作为其依赖项时。

@AutoWired

当您想要从 spring 上下文自动装配 bean 时使用,其工作方式与普通代码完全相同,但只能在实际创建应用程序上下文的测试中使用,例如用 或 注释的@WebMvcTest测试@SpringBootTest

@MockBean

可用于将模拟对象添加到 Spring 应用程序上下文。模拟将替换应用程序上下文中相同类型的任何现有 bean。如果没有定义相同类型的bean,则会添加一个新的bean。经常与@SpringBootTest

所以通常你要么:

  • 在没有 Spring 上下文的情况下使用@Mock@InjectMocks运行测试,这是首选,因为它更快。
  • 使用@SpringBootTest@SpringMvcTest来启动 spring 上下文,同时@MockBean创建模拟对象并@Autowired获取要测试的类的实例,mockbean 将用于其自动装配的依赖项。在为与数据库交互的代码编写集成测试或想要测试 REST API 控制器时,可以使用它。