ads1256模块模拟测试_使用模拟进行测试
ads1256模块模拟测试
如果使用正确的方法,模拟对象将非常有用。 我在需要驱动软件开发使用的帖子中分享了一些使用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;}
}
我们新的外汇服务必须遵循以下合同
- 根据输入/输出合同与货币转换器和银行转账进行交互。
- 对每个服务进行一次呼叫。
测试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
ads1256模块模拟测试
ads1256模块模拟测试_使用模拟进行测试相关推荐
- android 模拟电脑按键精灵,模拟精灵_安卓模拟精灵_和按键精灵一样的软件
多普鼠标键盘万能模拟精灵程序以指定窗口为操作目标,定位更准确.更快捷,并且不需要编写任何代码,只要会电脑操作的人就可以快速的生成强大的后台操作代码,可以完成任何一个前台用户可以完成的工作,可以应用到任 ...
- 快照测试_什么是快照测试,并且在PHP中可行?
快照测试 This article was peer reviewed by Matt Trask, Paul M. Jones, and Yazid Hanifi. Thanks to all of ...
- 端到端测试_端到端测试的滥用–测试技术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 ...
- 数据迁移测试_自动化数据迁移测试
数据迁移测试 Data migrations are notoriously difficult to test. They take a long time to run on large data ...
- 串行测试 并行测试_什么是并行测试,为什么要采用它?
串行测试 并行测试 随着技术的进步,随着组织从手动测试转向Selenium测试自动化 ,测试解决方案变得比以往更具可扩展性. 但是,大多数组织仍在努力的领域之一是可并行运行多个测试的可伸缩性. 许多公 ...
- 远程桌面服务怎么测试_快速的远程服务测试
远程桌面服务怎么测试 测试与远程服务交互的代码通常非常困难. 有很多折衷因素会影响您可以编写哪些测试以及要编写的测试数量. 在大多数情况下,您对从服务中获取的数据的控制为零,这使得断言至少很难说. 不 ...
- junit动态忽略测试_有条件忽略测试的JUnit规则
junit动态忽略测试 我一直认为使用@Ignore停用测试是一个坏主意. 例外,这可能是一种将间歇性失败的测试放入隔离区以供以后处理的方法(如Martin Fowler 在此处所述 ). 随着越来越 ...
- 网线传输速度测试_网络带宽和速度测试windows和linux用iperf工具
Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性.Iperf可以报告带宽,延迟抖动和数据包丢失.利用Iperf这一 ...
- 夜神模拟器模拟安卓测试_使用模拟进行测试
夜神模拟器模拟安卓测试 如果使用正确的方法,模拟对象将非常有用. 我在需要驱动软件开发使用的帖子中分享了一些使用Mock Objects的经验. 在这篇文章中,我分享了两件事 –使用模拟进行基于合同的 ...
最新文章
- 为 Virtual SAN 就绪节点和就绪块做好准备
- demo:a spreadsheet-like application
- [html] marquee详解
- 图片上传unexpected end of stream
- 17种常用的JS正则表达式 非负浮点数 非负正数
- php文件的作用,php入口文件的作用-PHP问题
- ios如何看idfv_如何无中生有资源搜索神器
- Python-OpenCV ·学习笔记
- python核心编程笔记chapter 14
- 51单片机c语言编程20个实例,51单片机C语言编程,20个实例..pdf
- WIFI 信道 channel
- 期末考试查分,基于青果高校教务系统的一个自动python脚本代码
- Flutter 网络请求王者 Dio 应用简介
- D语言使用dub编译ms-coff文件
- 狄利克雷卷积_狄利克雷卷积莫比乌斯反演总结
- (40)STM32——OV2640摄像头实验
- powerbi服务器打开文件慢,Power BI 优化指南
- 计算机专业学习资源合集 | 视频电子书资源
- Minecraft空岛服开服
- 如何给深度学习加速——模型压缩、推理加速