mock
测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 在具体的测试过程中,我们经常会碰到需要模拟数据或者接口的情况,因为环境问题或者系统复杂度的问题,我们需要使用 Mock 方式进行数据的模拟。
Mockito框架是单元测试处理bean依赖注入的一大利器
创建SpringBoot项目,版本为:2.3.7.RELEASE
假设有两个服务分别是OrderService和UserService,OrderService的服务因为某种原因调用不了,而我们又要通过UserService来调用OrderService,又不想改变UserService方法里面的逻辑,我们可以通过Mockito模拟OrderService返回来的数据。
创建OrderService和UserService接口
public interface UserService {String getUser();
}
public interface OrderService {String getOrder(Long id);
}
@Service
public class OrderServiceImpl implements OrderService {@Overridepublic String getOrder(Long id){return id+"";}
}
创建UserServiceImpl实现,从实现里看出,需要调用OrderService里的getOrder方法,但是我们还没有这个方法的实现,或者有时候有实现调用不了
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate OrderService orderService;@Overridepublic String getUser(){String order = orderService.getOrder(1L);return "name is zs,orderNum is"+order;}
}
在测试类中写如下代码
import cn.amoqi.cloud.mocktest.service.OrderService;
import cn.amoqi.cloud.mocktest.service.UserService;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.util.Assert;
import static org.mockito.ArgumentMatchers.any;@SpringBootTest
class MockTestApplicationTests {@Autowiredprivate UserService userService;@MockBeanprivate OrderService orderService;@Testvoid contextLoads() {Mockito.when(orderService.getOrder(any(Long.class))).thenReturn("5");String user = userService.getUser();System.out.println(user);Assert.isTrue("name is zs,orderNum is5".equals(user),"用户信息不正确");}
}
执行测试方法,就会发现调用orderService.getOrder方法
执行被替换成有结果的值 5
了,我们并没有实现OrderService,也没有报错
上一篇:开发人员体验:最重要的指标
下一篇:准备pmp考试第13天