首页 > 解决方案 > 如何使用 easymock 模拟 appium 驱动程序(ios/android)?

问题描述

我试图模拟 Appium IOS 驱动程序的示例代码,它给出了 Null >Pointer 异常

初始化 Driver 和 AndroidDriver 对象

Driver driver;
AndroidDriver<AndroidElement> androidDriver;

@SuppressWarnings({ "unchecked" })
@Test
public void getLogAndroid_happyPath() throws Exception{
>Setting logs to mock return type

List<LogEntry> setLogs = new ArrayList<LogEntry>();
setLogs.add(new LogEntry(Level.ALL, 0, "logs"));
driver = new Driver();

使用 Nice Mock 模拟 Android 驱动程序,这可能导致在此处输入代码无效>返回类型以及

androidDriver = EasyMock.createNiceMock(AndroidDriver.class);
driver.setAndroidDriver(androidDriver);

EasyMock 对象调用

EasyMock.expect(androidDriver.manage().logs().get(EasyMock.anyString()).getAll()).andReturn(setLogs);
EasyMock.replay(androidDriver);
try {
>Asserting mocked return type               

  assertTrue(driver.getLog("getLog",5000).contains(setLogs));       
} catch (Exception e) {
  e.printStackTrace();
}

>Verify EasyMock Object

EasyMock.verify(androidDriver);
EasyMock.reset(androidDriver);
}

标签: unit-testingappiumeasymock

解决方案


你不能这样做EasyMock.expect(androidDriver.manage().logs().get(EasyMock.anyString()).getAll())

即使androidDrive是模拟,也不会导致androidDriver.manage()返回模拟。它将返回空值。所以你现在可能有一个 NPE。

所以你需要类似的东西(我也在使用更现代的语法):

androidDriver = niceMock(AndroidDriver.class);
what_is_returned_by_manage = mock(WhatIsReturnedByManage.class);
what_is_returned_by_logs = mock(WhatIsReturnedByLogs.class);
what_is_returned_by_get = mock(WhatIsReturnedByGet.class);
expect(androidDriver.manage()).andReturn(what_is_returned_by_manage);
expect(what_is_returned_by_manage.logs()).andReturn(what_is_returned_by_logs);
expect(what_is_returned_by_logs.get(anyString())).andReturn(what_is_returned_by_get);
expect(what_is_returned_by_get.getAll()).andReturn(setLogs);

但实际上我永远不会编码。我会添加一个或类似getAllLogswhat_is_returned_by_manage东西。


推荐阅读