java - 为什么 Eclipse 和 maven 中的 double 比较不同?
问题描述
我有程序从文件中加载属性。当代码中的配置文件中不存在属性时,我将属性设置为默认值。
在 JUnit 测试中,我正在测试如果未设置属性,则该值是默认值。
我的属性是以毫秒为单位的某个阈值,它在字符串中,而不是转换为双精度和秒。默认值为 1000,因此 0.001 * 1000 = 1.0。
在我的代码中,我基本上有这个(我使用的是 JUnit 4.8):
double defaultThreshold = 1.0;
double threshold = getThreshold();
Assert.assertEquals(0, Double.compare(defaultThreshold, threshold));
我认为java版本可能有问题,但我在Eclipse中使用Java 1.6、1.7和1.8进行了尝试,并且在mvn中都通过了我使用java 1.7.0_71,但它与以下比较失败:
expected:<0> but was:<1>
注意:如果两个数字相等,Double.compare 返回 0。 https://www.tutorialspoint.com/java/lang/double_compare.htm 如果 d1 在数值上等于 d2,此方法返回值 0;如果 d1 在数值上小于 d2,则值小于 0;如果 d1 在数值上大于 d2,则值大于 0。
解决方案
问题不是在控制台 maven 和 Eclipse 中 JUnit 执行的双重而是不同顺序的比较:/ 问题的原因是,在一种情况下,以前的测试影响了另一个测试,而在另一种情况下,不是因为我期望的不同顺序是相同的但事实并非如此。
推荐阅读
- regex - 正则表达式处理 XML 标记 - 需要帮助
- graphics - 武器旋转三.js
- excel - VBA将选项卡另存为文本文件导致一个选项卡出现1004错误,但另一个选项卡没有?
- c# - 如何首先在 c# EF core 2.0 代码中强制迁移顺序
- swift - 为 MKClusterAnnotation 设置 MKMarkerAnnotationView 的 glyphText
- git - git 错误:RPC 失败,curl 56 GnuTLS recv 错误(-110)
- angular - Angular 6 反应式表单 Validators.minLength
- azure-active-directory - AAD B2B 协作:使用附加信息标记外部隐藏 AAD 中的用户
- c# - 在 mvc 应用程序中找不到视图
- r - R按列中的条件从文件列表中选择多个文件并保存在新文件夹中