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

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

推荐答案

@Mock

用于使Mockito创建模拟对象.

@InjectMock

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

@AutoWired

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

@MockBean

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

所以通常你要么:

  • 使用@Mock@InjectMocks进行无弹簧的测试
  • 使用@SpringBootTest@SpringMvcTest来启动spring上下文,使用@MockBean来创建模拟对象,使用@Autowired来获取要测试的类的实例,mockeans将用于其自动连接的依赖项.在为与数据库交互的代码编写集成测试或希望测试REST API时,可以使用此选项.

Java相关问答推荐

如何在Java中使用Rest模板通过查询参数发送GET请求

Java Swing绘制gif作为多个JSYS和JLabels的背景

如何让TaskView总是添加特定的列来进行排序?

滚动视图&不能在alert 对话框中工作(&Q;&Q;)

对某一Hyroby控制器禁用@cacheable

当我已经安装了其他版本的Java时,如何在Mac OSX 14.3.1上安装Java 6?

获取字符串中带空格的数字和Java中的字符

我无法获取我的Java Spring应用程序的Logback跟踪日志(log)输出

当涉及到泛型时,类型推理在Java中是如何工作的?

Kotlin内联互操作:强制装箱

在Java 17中使用两个十进制数字分析时间时出错,但在Java 8中成功

Java构造函数分支

如何使用log4j2(Json)记录由";异常引起的所有";?

当我在Java中有一个Synchronized块来递增int时,必须声明一个变量Volatile吗?

如果执行@BeForeEach#repository.save(),则测试中的UnitTest最终UUID会发生更改

如何在字节数组中反转UTF-8编码?

为什么相同的数据条码在视觉上看起来不同?

在权限列表中找不到我的应用程序

如何使用我的RLE程序解决此问题

[Guice/MissingImplementation]:未绑定任何实现