首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单元测试中使用什么货币?

在单元测试中使用什么货币?
EN

Stack Overflow用户
提问于 2015-03-12 02:16:18
回答 2查看 1.1K关注 0票数 7

我正在开发一个严重依赖于尤达-钱的应用程序,并且有许多单元测试来验证我的业务逻辑。对我来说,一个(不可否认是次要的)症结是要用什么样的Money/BigMoney对象进行测试;具体来说,使用什么CurrencyUnit

在我看来,我有几个选择:

  • 只需使用USD 这显然是最简单的方法,我的大部分实际应用程序将使用美元,因此这是合理的。另一方面,这感觉相当以美国为中心,我担心这可能会让特定货币的错误不受控制。
  • 使用另一种真正的货币,如CAD 这将捕获USD的错误硬编码,但否则不会比仅仅使用USD更好。
  • 使用专用“假”货币,即XTS 这显然是有意义的,毕竟,XTS是“保留用于测试”。但Joda将psuedo货币表示为-1小数位的货币。在实践中,Joda-Money中货币之间的主要区别是小数位数,因此这可能掩盖任何涉及小数位精度的错误,例如错误地将整数值舍入。
  • CurrencyUnit.registerCurrency()注册我自己的自定义货币 这显然是可行的,但似乎有点奇怪,因为有其他选择。
  • 使用由模拟库创建的CurrencyUnit实例 就像注册一个自定义货币一样。

同样,这显然是一个小问题,但我很好奇,这样的情况是否有标准的做法,或者是否有明确的理由特别喜欢这些选项之一。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-12 02:31:48

使用美元(或者,通常使用应用程序中最常用的任何货币)。我这样说有两个原因:

  • 好的测试数据在每个方面都是不显着的,除了测试所涉及的部分。当您编写与货币之间的差异无关的测试时,您不需要考虑货币之间的差异。只要使用应用程序中最自然的内容即可。
  • 在任何地方使用一种不寻常的货币将以某种方式导致更好地测试不寻常的货币,这一想法是一种避而不谈的想法。测试应该是明确的和有重点的。如果您需要测试某一特定货币的某些内容,请编写一个测试,其目的是测试该货币。如果一个测试不是关于某一特定货币的,那么当处理该货币中断的一些不寻常的方面时,它不应该中断--因为同样的原因,让你的测试中断一半是没有价值的;你只想要一个中断。因此,没有必要在测试套件中散布不寻常的货币,并希望这会带来一些收获。相反,为可读性进行优化;参见第1点。
票数 4
EN

Stack Overflow用户

发布于 2020-09-27 20:47:50

由于您的大多数应用程序都涉及美元,所以在绝大多数测试中使用它们是有意义的。你担心会发生什么特定于货币的错误?在复合利息的时候少了半分钱?兑换成日元和回来是少一分或两美分?为这个写测试。

如果我是您,我会启动一个本地REPL ( Scala非常好,如果您没有JShell),运行一些实验。你可能会发现你什么都不担心。或者您可能会发现确实存在缺陷,REPL会话将告诉您如何编写该缺陷的测试。

你用Joda的钱是因为你不想重新发明这个特殊的轮子。直到我读到问题的细节,我才意识到这一点。据推测,Joda Money已经通过它的开发人员进行了严格的测试,它做了您希望它做的一切。你不需要再测试它了。

但是,如果你用自己的等级来代表货币数额,我建议你使用美元、欧元、日元和利边第纳尔(LYD)。前三个原因是显而易见的。因为小数点的三位,我建议使用利比亚第纳尔。据我所知,没有实物的1迪拉姆硬币,因此,例如,513达拉希姆将被四舍五入到500达拉希姆,997达拉希姆将被舍入一个完整的第纳尔。

为了测试转换,我将从东加勒比美元(XCD)开始,因为它们被固定为2.70美元。稍后,您可以担心汇率之间的波动,以及您是否打算通过模拟一个汇率服务器,或者连接到一个实际的汇率服务器,但在您的测试或其他方式中添加差异来处理它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29000803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档