unit-testing - 如何使用 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);
}
解决方案
你不能这样做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);
但实际上我永远不会编码。我会添加一个或类似getAllLogs
的what_is_returned_by_manage
东西。
推荐阅读
- deployment - WebIDE 部署错误(ABAP 存储库) - UTM 9 http://www.sophos.com
- python-3.x - Python:聚类搜索关键字
- c# - 在 asp.net core MVC 中显示控制器视图时出错
- python - boto3 describe_fleets api 未获取所有车队信息
- apache-flink - Flink 保存点每次都从头开始重新启动我的一次性源(S3 和 Kinesis)
- python - 计算由字符串的混合值和字符串列表组成的 pandas 数据框列中的唯一值
- javascript - 使用 moment.js 将今天的时间添加到明天的日期 js
- sql - 如何验证按下提交按钮时为空的交互式网格
- webpack - 如何强制 webpack 为资源生成动态 publicPath
- regex - 为匹配特定模式的字符串添加前缀