夜神模拟器模拟安卓测试_使用模拟进行测试
夜神模拟器模拟安卓测试
如果使用正确的方法,模拟对象将非常有用。 我在需要驱动软件开发使用的帖子中分享了一些使用Mock Objects的经验。
![](/assets/blank.gif)
在这篇文章中,我分享了两件事
–使用模拟进行基于合同的测试。
–用于组织模拟代码的模式。
基于合同的测试
让我们以正在构建汇款服务的场景为例。 此类服务的关键组件是货币转换器,银行服务和外汇服务。
50000英尺的虚拟外汇服务设计如下所示。
![](/assets/blank.gif)
我们必须编写需要货币换算和银行转账服务的外汇服务。
这是基于接触的测试的理想方案。
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
夜神模拟器模拟安卓测试
夜神模拟器模拟安卓测试_使用模拟进行测试相关推荐
- 夜神模拟器(安卓9版本)中脱壳
环境 一.Dexdump简介 二.使用步骤 一.Dexdump简介 Dexdump是基于Frida开发的脱壳工具.(下面脱壳一个360加固的软件,无限泉州) 需要的环境:安装好了Python.fr ...
- 安卓夜神模拟器配合ADB及drozer进行app渗透测试
网上目前我是没看到有成熟的相关文档,在自己踩了几个坑之后,将使用文档整理出. 首先下载夜神模拟器,这个不难,百度一下就能下载. adb下载: 链接:https://pan.baidu.com/s/1S ...
- Android【1】:一文教你使用Camille+夜神模拟器实现安卓应用隐私合规辅助检测
碎碎念: 不好意思最近课业上比较繁忙,一直忙于一些测试,没有按时来填坑.今天带来的是基于课程项目要求,需要完成的安卓应用行为检测Demo. 因为环境的配置花费了一些时间,做一个简单的记录,方便后续进行 ...
- 夜神模拟器和安卓连接
夜神是一款模拟各种操作的模拟器.那么在我们开发安卓/react-native项目时候需要开启模拟器,这两者就完美的结合起来了. 下面来看看连接过程吧: 1:在百度上搜索:夜神模拟器下载. 2:运行夜神 ...
- Fiddler+夜神模拟器进行安卓APP抓包
Fiddler正是在这里帮助您记录计算机和Internet之间传递的所有HTTP和HTTPS通信. 更好的是,Fiddler捕获了所有本地运行进程的流量,从而记录了服务器到服务器(例如Web服务)和设 ...
- 端到端测试_端到端测试的滥用–测试技术2
端到端测试 我的上一个博客是有关测试代码方法的一系列博客中的第一篇,概述了使用一种非常常见的模式从数据库检索地址的简单方案: -并描述了一种非常通用的测试技术: 不编写测试 , 而是手动进行所有操作. ...
- 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 ...
- 快照测试_什么是快照测试,并且在PHP中可行?
快照测试 This article was peer reviewed by Matt Trask, Paul M. Jones, and Yazid Hanifi. Thanks to all of ...
- 数据迁移测试_自动化数据迁移测试
数据迁移测试 Data migrations are notoriously difficult to test. They take a long time to run on large data ...
最新文章
- javaWeb -- HTTP协议
- 详解javascript: void(0);
- 从Eclipse转移到IntelliJ IDEA一点心得
- python处理数据的优势-选择python进行数据分析的理由和优势
- 声学漫谈之六:音腔频段如何判定?
- 推理集 —— 思维的误区
- Oracle启用和禁用触发器
- 【线上分享】基于CDN边缘网络智能优化图片和视频
- nao机器人行走速度_震撼!寒冬腊月里惊现多台历途外墙清洗机器人
- unity 草 可以一棵棵种吗?_俗语“门前一棵柳,金银财宝往家走”啥意思?房前可以种柳树吗?...
- JavaScript0-闭包
- Ubuntu目录结构简单介绍笔记
- linux中create命令详解,linux中 pmap 命令详解
- CCNA-(5)-IP路由汇总
- 09月27日 pytorch与resnet(二)
- [ERROR] melodic运行比较新的包时报错,我这里是racecar的包出错
- 如何识别图片文字?这几个识别图片文字软件简单又高效
- python中列表中字符串按数字排列
- 《暗时间》----读书笔记
- php调取微信接口token上限,解决微信access_token上限问题
热门文章
- Early Orders
- 牛客题霸 [没有重复项数字的所有排列] C++题解/答案
- 牛客网【每日一题】4月29日题目精讲 Symmetric Matrix
- CF1472(div3):总结
- jzoj5354-导弹拦截【dp,最大匹配,最少路径覆盖】
- OJ1306-最长公共子上升序列【dp】
- codeforces1303 F. Number of Components(并查集+添_正序、删_逆序)
- LOJ dfs序1234
- GYM101002C - Greetings!
- vue-beauty UI库