![](/img/trans.png)
[英]EasyMock expect method to return multiple, different objects in a for Loop
[英]EasyMock expect method to return multiple, different objects in same test
我正在使用EasyMock对我的Java代码进行单元测试。 我正在尝试测试的类是RESTful webservice API层。 API有一个底层服务层,在API测试中被模拟。 我的问题是弄清楚如何正确地单元测试我的editObject(ID, params...)
API方法,因为它调用service.getById()
两次并期望每次调用都返回一个不同的对象。
editObject(ID, params...)
首先尝试从服务层获取对象以确保ID有效(第一个service.getById(ID)
调用expect,返回原始的未修改对象)。 接下来,它修改API调用中指定的参数,将其保存到服务,然后再次调用get将调用者交给服务管理的修改对象(第二个service.getbyId(ID)
调用expect,返回修改后的对象)。
有没有办法用EasyMock表示这个?
当然,对于具有相同方法和参数的两个方法调用,您可以执行两个不同的操作。 只需按照您期望的顺序声明您的期望,并相应地设置响应。
expect(mockService.getById(7)).andReturn(originalObject).once();
expect(mockService.getById(7)).andReturn(modifiedObject).once();
replay(mockService);
.once()
是可选的,但在这种情况下我发现它更自我记录。
您可以链接多个andReturn
方法调用:
EasyMock.expect(service.getById(1))
.andReturn(firstObject)
.andReturn(secondObject);
第一次使用1
作为参数调用service.getById
,mock将返回firstObject
,第二次返回secondObject
。 您可以根据需要andThrow
数量,甚至可以通过andThrow
为特定调用抛出异常。
此技术在条件表达式中也很有用,在条件表达式中,您可能希望使第一个条件无效,但是传递第二个条件,反之亦然。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.