第一种情况有效,而第二种情况返回UserDAO的NullPointerException。我是不是完全误解了这是怎么回事?
UserDao userDao;
@Before
public void setUp() throws Exception {
userDao = Mockito.mock(UserDao.class);
when(userDao.userExists("TestUser")).thenReturn(true);
}
@Mock
private UserDao userDao;
@InjectMocks
private UserService userService;
@Before
public void setUp() throws Exception {
when(userDao.userExists("TestUser")).thenReturn(true); // NPE
}
您需要将MockitoAnnotations.initMocks(this);
添加到@before
方法中,以创建@mock
注释字段。请参见这里的详细信息:
必须调用mockitoAnnotations.initMocks(this)方法来初始化带注释的模拟。在上面的示例中,initMocks()在test基类的@before(JUnit4)方法中调用。对于JUnit3,initMocks()可以转到基类的setup()方法。您还可以将initMocks()放在JUnit runner(@runwith)中,或者使用内置的runner:MockitoJUnit44Runner,MockitoJUnitRunner
1. Mockito Mockito 有着比EasyMock更优雅的API。 官方最完整的文档。 与EasyMock比,它分开了设定返回值的stub语句与验证mock被调用过的verify函数,两者不再连在一起,不再需要那种记录,然后replay()的语句,而是需要分别独立编写。 使用示例见quickstart中的AccoutServiceTest. 当然,Mockito的基本原理还是用cglib
Mock functions are also known as "spies", because they let you spy on the behavior of a function that is called indirectly by some other code, rather than only testing the output. You can create a moc
Mock 函数允许你测试代码之间的连接——实现方式包括:擦除函数的实际实现、捕获对函数的调用 ( 以及在这些调用中传递的参数) 、在使用 new 实例化时捕获构造函数的实例、允许测试时配置返回值。 有两种方法可以模拟函数:要么在测试代码中创建一个 mock 函数,要么编写一个手动 mock来覆盖模块依赖。 使用 mock 函数 假设我们要测试函数 forEach 的内部实现,这个函数为传入的数组中
Mock 数据是前端开发过程中必不可少的一环,是分离前后端开发的关键链路。通过预先跟服务器端约定好的接口,模拟请求数据甚至逻辑,能够让前端开发更加独立自主,不会被服务端的开发所阻塞。 Swagger 在公司的项目中通常使用 swagger, 由后端来模拟业务数据。 swagger 是一个 REST APIs 文档生成工具,它从代码注释中自动生成文档,可以跨平台,开源,支持大部分语言,社区好,总之非
Easy Mock 是一个可视化,并且能快速生成 模拟数据 的持久化服务。 特性 支持接口代理 支持快捷键操作 支持协同编辑 支持团队项目 支持 Restful 支持 Swagger 1.2 & 2.0 基于 Swagger 快速创建项目 支持显示接口入参与返回值 支持显示实体类 支持灵活性与扩展性更高的响应式数据开发 支持 Mock.js 语法 支持 restc 方式的接口预览
Google Mock 是 Google 刚刚开源的一套 C++ Mock 框架。 Google Mock在google内部超过100个项目中使用过,由Zhanyong Wan,一个google的软件工程师(看名字大概是华裔),从jMock和EasyMock中获得灵感而开发。 这个框架能够在Linux,Windows 和Mac OS X上使用。