我正在开发一个严重依赖于尤达-钱的应用程序,并且有许多单元测试来验证我的业务逻辑。对我来说,一个(不可否认是次要的)症结是要用什么样的Money/BigMoney对象进行测试;具体来说,使用什么CurrencyUnit。
在我看来,我有几个选择:
USD
这显然是最简单的方法,我的大部分实际应用程序将使用美元,因此这是合理的。另一方面,这感觉相当以美国为中心,我担心这可能会让特定货币的错误不受控制。CAD
这将捕获USD的错误硬编码,但否则不会比仅仅使用USD更好。XTS
这显然是有意义的,毕竟,XTS是“保留用于测试”。但Joda将psuedo货币表示为-1小数位的货币。在实践中,Joda-Money中货币之间的主要区别是小数位数,因此这可能掩盖任何涉及小数位精度的错误,例如错误地将整数值舍入。CurrencyUnit.registerCurrency()注册我自己的自定义货币
这显然是可行的,但似乎有点奇怪,因为有其他选择。CurrencyUnit实例
就像注册一个自定义货币一样。同样,这显然是一个小问题,但我很好奇,这样的情况是否有标准的做法,或者是否有明确的理由特别喜欢这些选项之一。
发布于 2015-03-12 02:31:48
使用美元(或者,通常使用应用程序中最常用的任何货币)。我这样说有两个原因:
发布于 2020-09-27 20:47:50
由于您的大多数应用程序都涉及美元,所以在绝大多数测试中使用它们是有意义的。你担心会发生什么特定于货币的错误?在复合利息的时候少了半分钱?兑换成日元和回来是少一分或两美分?为这个写测试。
如果我是您,我会启动一个本地REPL ( Scala非常好,如果您没有JShell),运行一些实验。你可能会发现你什么都不担心。或者您可能会发现确实存在缺陷,REPL会话将告诉您如何编写该缺陷的测试。
你用Joda的钱是因为你不想重新发明这个特殊的轮子。直到我读到问题的细节,我才意识到这一点。据推测,Joda Money已经通过它的开发人员进行了严格的测试,它做了您希望它做的一切。你不需要再测试它了。
但是,如果你用自己的等级来代表货币数额,我建议你使用美元、欧元、日元和利边第纳尔(LYD)。前三个原因是显而易见的。因为小数点的三位,我建议使用利比亚第纳尔。据我所知,没有实物的1迪拉姆硬币,因此,例如,513达拉希姆将被四舍五入到500达拉希姆,997达拉希姆将被舍入一个完整的第纳尔。
为了测试转换,我将从东加勒比美元(XCD)开始,因为它们被固定为2.70美元。稍后,您可以担心汇率之间的波动,以及您是否打算通过模拟一个汇率服务器,或者连接到一个实际的汇率服务器,但在您的测试或其他方式中添加差异来处理它们。
https://stackoverflow.com/questions/29000803
复制相似问题