在 spring webflux 反应项目中何时使用和不使用@Mock 注释、@MockBean 注释、@InjectMock 注释和@Autowired 注释

When to use and not use @Mock annotation, @MockBean annotation, @InjectMock annotation & @Autowired annotation in a spring webflux reactive project

你能解释一下什么时候使用下面的注释,什么时候不使用这些注释吗?我对测试框架还很陌生,对网络上的所有答案感到困惑。

@Mock
private Resource resource;
@MockBean
private Resource resource;
@InjectMock
private ProductService productService; 
@AutoWired
Private ProductRepository productRepo;

@Mock

用于让 Mockito 创建模拟对象。

@InjectMock

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

@AutoWired

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

@MockBean

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

一起使用

所以通常你要么:

  • 在没有 spring 的情况下使用 @Mock@InjectMocks 进行 运行 测试 上下文,这是首选,因为它更快。
  • 使用@SpringBootTest@SpringMvcTest启动spring上下文,@MockBean创建模拟对象,@Autowired获取[=的实例53=] 你想测试,mockeans 将用于它的自动装配依赖项。在为与数据库交互的代码编写集成测试或想要测试 REST API.
  • 时使用它