SpringBoot 测试实践 - 3:@MockBean、@SpyBean 、提升测试运行速度、Testcontainer
上一节:SpringBoot 测试实践 - 2:单元测试与集成测试 编写测试的时候,我们必须保证外部依赖行为一致,也需要模拟一些边界条件,所以我们需要使用 Mock 来模拟对象的行为。SpringBoot 提供了 @MockBean 和 @SpyBean 注解,可以方便地将模拟对象与 Spring 测试相结合,简化测试代码的编写 @MockBean @MockBean 是 Spring Boot Test提供的注解,用于在 Spring Boot 测试中创建一个模拟的 Bean 实例,并注入到测试类中的依赖项中。使用 Mock 可以控制被 Mock 对象的行为:自定义返回值、抛出指定异常等,模拟各种可能的情况,提高测试的覆盖率 @SpringBootTest @RunWith(SpringRunner.class) public class MyServiceTest { @MockBean private ExternalDependency externalDependency; @Autowired private MyService myService; @Test public void testSomeMethod() { // 定义外部依赖的行为 Mockito.when(externalDependency.someMethod()).thenReturn("Mocked Result"); // 调用被测试类的方法 // 被测方法内部调用了 ExternalDependency 的 someMethod 方法 String result = myService.someMethod(); // 验证外部依赖的方法是否被调用 Mockito.verify(externalDependency).someMethod(); // 断言结果 assertEquals("Mocked Result", result); } } 需要注意的是:使用了 @MockBean,会创建完全模拟的对象,它完全替代了被模拟的 Bean,并且所有方法的调用都被模拟。对于未指定行为的方法,返回值如果是基本类型则返回对应基本类型的默认值,如果是引用类型则返回 null ...