EasyMock 期望在同一测试中返回多个不同的对象

2022-09-03 17:08:39

我正在使用EasyMock来单元测试我的Java代码。我试图测试的类是一个RESTful Webservice API层。API 有一个底层服务层,在 API 测试中被模拟。我的问题是弄清楚如何正确地对我的API方法进行单元测试,因为它调用了两次,并且期望每次调用返回不同的对象。editObject(ID, params...)service.getById()

editObject(ID, params...)首先尝试从服务层抓取对象以确保 ID 有效(首先调用预期,返回原始未修改的对象)。接下来,它修改 API 调用中指定的参数,将其保存到服务中,然后再次调用 get 以将服务托管的修改对象传递给调用方(第二次调用预期,返回修改后的对象)。service.getById(ID)service.getbyId(ID)

有没有办法用EasyMock来表示这一点?


答案 1

当然,您可以对具有相同方法和参数的两个方法调用执行两种不同的操作。只需按照您期望发生的顺序声明您的期望,并相应地设置响应即可。

expect(mockService.getById(7)).andReturn(originalObject).once();
expect(mockService.getById(7)).andReturn(modifiedObject).once();
replay(mockService);

这是可选的,但我发现在这种情况下,它更具自我记录性。.once()


答案 2

您可以链接多个方法调用:andReturn

EasyMock.expect(service.getById(1))
    .andReturn(firstObject)
    .andReturn(secondObject);

第一次调用时,模拟将返回参数,第二次调用 。您可以根据需要链接任意数量,甚至可以为特定调用引发异常。service.getById1firstObjectsecondObjectandThrow


推荐