【问题标题】:Android Easymock, how to add one more expectation without resetting the mockAndroid Easymock,如何在不重置mock的情况下再添加一个期望
【发布时间】:2017-02-11 07:09:33
【问题描述】:

我已经对这样的方法增加了期望,

expect(locationManager.isLocationSettingsEnabled(anyObject(FragmentActivity.class))).andReturn(isLocationEnabled).anyTimes();

replay(locationManager);

但是当我添加时,在重播后期望再有一个方法(如下所述),第一个方法会自动重置。

expect(locationManager.isNotificationSettingsEnabled(anyObject(FragmentActivity.class))).andReturn(isNotificationsEnabled).anyTimes();

我想知道如何在不重置的情况下再添加一个期望。

【问题讨论】:

标签: android unit-testing easymock android-espresso


【解决方案1】:

Easymock 功能就是基于这个原理。

  • 当您对方法设置一些期望时,您通常是在伪造/模拟该方法的行为。
  • 现在,当您调用 replay(mockObject) 时,Easymock 会在 Test Runner 环境中注入这种模拟行为。

因此,在重放模拟对象之前,您需要对模拟对象执行所有期望。

类似这样的:

EasyMock.expect(mockObject.method1()).andReturn(null);
EasyMock.expect(mockObject.method2()).andReturn(null);

EasyMock.replay(mockObject);

仔细观察您的问题,我发现您正在模拟一个带有两个不同返回子句的方法 你可以这样做:

EasyMock.expect(mockObject.method1()).andReturn(new Integer(1)).once();
EasyMock.expect(mockObject.method1()).andReturn(new Integer(2)).once();

EasyMock.replay(mockObject);

通过这个 Easymock 将在第一次调用方法时返回 1 作为输出,在第二次调用方法时返回 2。

希望对您有所帮助!

祝你好运!

【讨论】:

  • 附带说明,once() 不是必需的,因为它是默认设置。你也可以通过管道调用andReturn(1).andReturn(2)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 2021-08-09
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多