夜神模拟器模拟安卓测试

如果使用正确的方法,模拟对象将非常有用。 我在需要驱动软件开发使用的帖子中分享了一些使用Mock Objects的经验。


在这篇文章中,我分享了两件事
–使用模拟进行基于合同的测试。
–用于组织模拟代码的模式。

基于合同的测试

让我们以正在构建汇款服务的场景为例。 此类服务的关键组件是货币转换器,银行服务和外汇服务。

50000英尺的虚拟外汇服务设计如下所示。


我们必须编写需要货币换算和银行转账服务的外汇服务。
这是基于接触的测试的理想方案。

FXService的代码段

public class FXService {private final CurrencyConverter currencyConverter;private final BankService bankService;private final double commissionPer;public String transfer(Money money, BankAccount destinationAccount, Currency target) {String sourceCurrency = money.currency().name();String targetCurrency = target.name();double commissionAmount = calculateCommission(money.amount());double fxRate = currencyConverter.convert(1, sourceCurrency, targetCurrency); // First interaction  double transferAmount = calculateTransferAmount(money, commissionAmount);double totalAmount = applyFxRate(transferAmount, fxRate);String transactionId = bankService.deposit(totalAmount, destinationAccount); // Second interaction return transactionId;}
}

我们新的外汇服务必须遵循以下合同

  • 根据输入/输出合同与货币转换器和银行转账进行交互。
  • 对每个服务进行1次呼叫。

测试FX服务的一种方法是调用真实服务,但这意味着测试运行缓慢,并且在执行测试时必须依赖于服务。 有时调用实时服务不是一种选择,因为它尚未开发。

聪明的方法是模拟这些合作者(货币转换器和银行转账)并使用模拟框架验证交互。

使用模拟进行测试的另一个优点是,它可以验证fxservice是否以预期的方式使用了货币和银行转账服务。

让我们看一下基于模拟的测试。

@Testpublic void transfer_sgd_to_inr() {FXService fxService = new FXService(currencyConverter, bankService, 0.0d);BankAccount account = new BankAccount("1111-22222", "SuperStableBank");expect(currencyConverter.convert(1, "SGD", "INR")).andReturn(50d);expect(bankService.deposit(100d, account)).andReturn("99999");replay(currencyConverter, bankService);String id = fxService.transfer(new Money(SGD, 2d), account, INR);assertEquals("99999", id);verify(currencyConverter, bankService);}

该测试是使用EasyMock框架编写的,并且是模拟来自协作者的答复。

编写要阅读的测试

良好测试的重要属性之一是阅读愉快。

嘲弄会使目标更加难以实现,因为用于单元测试的安装代码将具有非常复杂的组装逻辑,这些逻辑将混合一些常规对象集和某些模拟期望。 我确定您已经在测试中看到过功能,该功能可用作类中所有测试所需的设置的转储场。

让我们看一下我们先前使用的一些模拟代码,并尝试对其进行改进

expect(currencyConverter.convert(1, "SGD", "INR")).andReturn(50d);
expect(bankService.deposit(100d, account)).andReturn("99999");
replay(currencyConverter, bankService);

其他方式

@RegisterExtension
JUnit5Mockery context = new JUnit5Mockery();context.checking(new Expectations() {{oneOf(currencyConverter).convert(1, "SGD", "INR");will(returnValue(50d));oneOf(bankService).deposit(100d, account);will(returnValue("99999"));}});

上面的两个代码都在做同样的事情,但是后来用jmock编写的代码具有很好的糖方法来表达同样的事情。
这有助于使期望保持清洁,并与正在测试的代码保持一致。 上下文中的协作对象被模拟出来。
简单的模式,但在使测试可读性方面非常有效。

这篇文章中使用的代码可以在github上找到

翻译自: https://www.javacodegeeks.com/2020/04/testing-using-mocks.html

夜神模拟器模拟安卓测试

夜神模拟器模拟安卓测试_使用模拟进行测试相关推荐

  1. 夜神模拟器(安卓9版本)中脱壳

    ​ 环境 一.Dexdump简介 二.使用步骤 一.Dexdump简介 Dexdump是基于Frida开发的脱壳工具.(下面脱壳一个360加固的软件,无限泉州) 需要的环境:安装好了Python.fr ...

  2. 安卓夜神模拟器配合ADB及drozer进行app渗透测试

    网上目前我是没看到有成熟的相关文档,在自己踩了几个坑之后,将使用文档整理出. 首先下载夜神模拟器,这个不难,百度一下就能下载. adb下载: 链接:https://pan.baidu.com/s/1S ...

  3. Android【1】:一文教你使用Camille+夜神模拟器实现安卓应用隐私合规辅助检测

    碎碎念: 不好意思最近课业上比较繁忙,一直忙于一些测试,没有按时来填坑.今天带来的是基于课程项目要求,需要完成的安卓应用行为检测Demo. 因为环境的配置花费了一些时间,做一个简单的记录,方便后续进行 ...

  4. 夜神模拟器和安卓连接

    夜神是一款模拟各种操作的模拟器.那么在我们开发安卓/react-native项目时候需要开启模拟器,这两者就完美的结合起来了. 下面来看看连接过程吧: 1:在百度上搜索:夜神模拟器下载. 2:运行夜神 ...

  5. Fiddler+夜神模拟器进行安卓APP抓包

    Fiddler正是在这里帮助您记录计算机和Internet之间传递的所有HTTP和HTTPS通信. 更好的是,Fiddler捕获了所有本地运行进程的流量,从而记录了服务器到服务器(例如Web服务)和设 ...

  6. 端到端测试_端到端测试的滥用–测试技术2

    端到端测试 我的上一个博客是有关测试代码方法的一系列博客中的第一篇,概述了使用一种非常常见的模式从数据库检索地址的简单方案: -并描述了一种非常通用的测试技术: 不编写测试 , 而是手动进行所有操作. ...

  7. react jest测试_如何使用React测试库和Jest开始测试React应用

    react jest测试 Testing is often seen as a tedious process. It's extra code you have to write, and in s ...

  8. 快照测试_什么是快照测试,并且在PHP中可行?

    快照测试 This article was peer reviewed by Matt Trask, Paul M. Jones, and Yazid Hanifi. Thanks to all of ...

  9. 数据迁移测试_自动化数据迁移测试

    数据迁移测试 Data migrations are notoriously difficult to test. They take a long time to run on large data ...

最新文章

  1. javaWeb -- HTTP协议
  2. 详解javascript: void(0);
  3. 从Eclipse转移到IntelliJ IDEA一点心得
  4. python处理数据的优势-选择python进行数据分析的理由和优势
  5. 声学漫谈之六:音腔频段如何判定?
  6. 推理集 —— 思维的误区
  7. Oracle启用和禁用触发器
  8. 【线上分享】基于CDN边缘网络智能优化图片和视频
  9. nao机器人行走速度_震撼!寒冬腊月里惊现多台历途外墙清洗机器人
  10. unity 草 可以一棵棵种吗?_俗语“门前一棵柳,金银财宝往家走”啥意思?房前可以种柳树吗?...
  11. JavaScript0-闭包
  12. Ubuntu目录结构简单介绍笔记
  13. linux中create命令详解,linux中 pmap 命令详解
  14. CCNA-(5)-IP路由汇总
  15. 09月27日 pytorch与resnet(二)
  16. [ERROR] melodic运行比较新的包时报错,我这里是racecar的包出错
  17. 如何识别图片文字?这几个识别图片文字软件简单又高效
  18. python中列表中字符串按数字排列
  19. 《暗时间》----读书笔记
  20. php调取微信接口token上限,解决微信access_token上限问题

热门文章

  1. Early Orders
  2. 牛客题霸 [没有重复项数字的所有排列] C++题解/答案
  3. 牛客网【每日一题】4月29日题目精讲 Symmetric Matrix
  4. CF1472(div3):总结
  5. jzoj5354-导弹拦截【dp,最大匹配,最少路径覆盖】
  6. OJ1306-最长公共子上升序列【dp】
  7. codeforces1303 F. Number of Components(并查集+添_正序、删_逆序)
  8. LOJ dfs序1234
  9. GYM101002C - Greetings!
  10. vue-beauty UI库