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模块模拟测试_使用模拟进行测试相关推荐

  1. android 模拟电脑按键精灵,模拟精灵_安卓模拟精灵_和按键精灵一样的软件

    多普鼠标键盘万能模拟精灵程序以指定窗口为操作目标,定位更准确.更快捷,并且不需要编写任何代码,只要会电脑操作的人就可以快速的生成强大的后台操作代码,可以完成任何一个前台用户可以完成的工作,可以应用到任 ...

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

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

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

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

  4. 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 ...

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

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

  6. 串行测试 并行测试_什么是并行测试,为什么要采用它?

    串行测试 并行测试 随着技术的进步,随着组织从手动测试转向Selenium测试自动化 ,测试解决方案变得比以往更具可扩展性. 但是,大多数组织仍在努力的领域之一是可并行运行多个测试的可伸缩性. 许多公 ...

  7. 远程桌面服务怎么测试_快速的远程服务测试

    远程桌面服务怎么测试 测试与远程服务交互的代码通常非常困难. 有很多折衷因素会影响您可以编写哪些测试以及要编写的测试数量. 在大多数情况下,您对从服务中获取的数据的控制为零,这使得断言至少很难说. 不 ...

  8. junit动态忽略测试_有条件忽略测试的JUnit规则

    junit动态忽略测试 我一直认为使用@Ignore停用测试是一个坏主意. 例外,这可能是一种将间歇性失败的测试放入隔离区以供以后处理的方法(如Martin Fowler 在此处所述 ). 随着越来越 ...

  9. 网线传输速度测试_网络带宽和速度测试windows和linux用iperf工具

    Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性.Iperf可以报告带宽,延迟抖动和数据包丢失.利用Iperf这一 ...

  10. 夜神模拟器模拟安卓测试_使用模拟进行测试

    夜神模拟器模拟安卓测试 如果使用正确的方法,模拟对象将非常有用. 我在需要驱动软件开发使用的帖子中分享了一些使用Mock Objects的经验. 在这篇文章中,我分享了两件事 –使用模拟进行基于合同的 ...

最新文章

  1. 为 Virtual SAN 就绪节点和就绪块做好准备
  2. demo:a spreadsheet-like application
  3. [html] marquee详解
  4. 图片上传unexpected end of stream
  5. 17种常用的JS正则表达式 非负浮点数 非负正数
  6. php文件的作用,php入口文件的作用-PHP问题
  7. ios如何看idfv_如何无中生有资源搜索神器
  8. Python-OpenCV ·学习笔记
  9. python核心编程笔记chapter 14
  10. 51单片机c语言编程20个实例,51单片机C语言编程,20个实例..pdf
  11. WIFI 信道 channel
  12. 期末考试查分,基于青果高校教务系统的一个自动python脚本代码
  13. Flutter 网络请求王者 Dio 应用简介
  14. D语言使用dub编译ms-coff文件
  15. 狄利克雷卷积_狄利克雷卷积莫比乌斯反演总结
  16. (40)STM32——OV2640摄像头实验
  17. powerbi服务器打开文件慢,Power BI 优化指南
  18. 计算机专业学习资源合集 | 视频电子书资源
  19. Minecraft空岛服开服
  20. 如何给深度学习加速——模型压缩、推理加速

热门文章

  1. android studio 制作app欢迎界面-两种方法(功能)(备忘)
  2. 一文看懂人工智能产业链!
  3. 思考力——提升企业竞争力的核心因素
  4. linux服务器cpu/负载占用率100%怎么办?
  5. 愿以三生烟火,换君一世迷离
  6. 网络安全理论与技术概述-带你了解网络安全
  7. 德昂年会—北京站圆满落幕
  8. 计算机基础与知识点总结,计算机基础知识点总结
  9. 阿里巴巴:入门者最常问的几个问题
  10. 风扇空调照明灯动画的创建