首页 > Java > java教程 > 正文

哪种模拟方法适合您:@Mock、@MockBean 还是 Mockito.mock()?

Susan Sarandon
发布: 2024-10-26 06:52:30
原创
639 人浏览过

 Which Mocking Approach is Right for You: @Mock, @MockBean, or Mockito.mock()?

理解 @Mock、@MockBean 和 Mockito.mock() 之间的区别

单元测试通常涉及模拟依赖关系,但是有在 Java 中执行此操作的不同方法。为了区分这些选项,让我们探讨 @Mock、@MockBean 和 Mockito.mock() 的不同用途和功能。

@Mock 和 Mockito.mock()

@Mock 和 Mockito.mock() 都源自 Mockito 库,它提供了基于注释的语法和直接方法调用来创建模拟。

使用 @Mock 和 @RunWith 注释可以启用 Mockito测试执行期间的注释。此注释将其附加的变量标记为 Mockito 模拟。

import org.mockito.Mock;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
    @Mock
    private MyService myservice;
}
登录后复制

相反,Mockito.mock() 直接创建一个模拟:

import org.mockito.Mockito;
...
MyService myservice = Mockito.mock(MyService.class);
登录后复制

@MockBean from另一方面,Spring Boot

@MockBean 是由 Spring Boot 测试库提供的,特别是在 org.springframework.boot.test.mock.mockito.MockBean 类下。此注释专门设计用于 Spring Boot 上下文。

@MockBean 允许将模拟 bean 添加到 Spring ApplicationContext,有效地覆盖或添加模拟来代替实际 bean 实例。

选择正确的选项:经典 Mockito 与 @MockBean

何时使用哪种方法取决于测试场景以及如何管理依赖项:

  • Classic Mockito:非常适合不依赖 Spring Boot 容器并希望隔离测试组件的单元测试。这种方法非常高效并促进隔离。
  • @MockBean:首选需要与 Spring Boot 容器交互的测试,特别是在模拟由容器管理的 bean 时。

Spring WebMVC 中 @MockBean 的典型用法

例如,在使用 @WebMvcTest 注释的 Web 测试场景中,@MockBean 通常用于模拟被测控制器使用的 bean:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
...
@WebMvcTest(FooController.class)
public class FooControllerTest {
    @Autowired
    private MockMvc mvc;

    @MockBean
    private FooService fooServiceMock;
}
登录后复制

通过了解这些差异并根据您的测试需求选择适当的方法,您可以有效地管理依赖关系并确保使用 Mockito 和 Spring Boot 在 Java 中进行高效、准确的测试。

以上是哪种模拟方法适合您:@Mock、@MockBean 还是 Mockito.mock()?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板