我想知道为什么assertEquals(double, double)
被弃用了。
我使用import static org.junit.Assert.assertEquals;
并使用了JUnit 4.11。
以下是我的代码:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class AccountTest {
@Test
public void test() {
Account checking = new Account(Account.CHECKING);
checking.deposit(1000.0);
checking.withdraw(100.0);
assertEquals(900.0, checking.getBalance());
}
}
checking.getBalance()
会返回一个双精度值。
可能出现什么问题?
答案 0 :(得分:64)
由于双精度问题,它已被弃用。
如果你注意到,还有另一种方法assertEquals(double expected, double actual, double delta)
允许delta
精度损失。
断言两个双精度等于正三角形。如果不是,则抛出AssertionError。如果预期值为无穷大,则忽略delta值.NaNs被认为是相等的:
assertEquals(Double.NaN, Double.NaN, *)
传递...
delta - 两个数字仍被视为相等的预期值与实际值之间的最大差值。
答案 1 :(得分:15)
人们解释但不要提供样品......所以这就是对我有用的东西:
@Test
public void WhenMakingDepositAccountBalanceIncreases() {
Account account = new Account();
account.makeDeposit(10.0);
assertEquals("Account balance was not correct.", 10.0, account.getBalance(), 0);
}
最后0
;
答案 2 :(得分:12)
assertEquals(double, double)
,因为2个双精度数可能相同,但如果它们是计算值,则处理器可能会使它们略有不同。
如果您尝试此操作,则会失败:assertEquals(.1 + .7, .8)
。 使用英特尔®处理器进行测试。
调用deprecated method将触发fail("Use assertEquals(expected, actual, delta) to compare floating-point numbers");
被调用。
答案 3 :(得分:0)
古老的问题,但这还没有被提及,可能会帮助别人。
您可以使用com.google.common.math.DoubleMath.fuzzyEquals(double a, double b, double tolerance)
来指定两个双打之间的距离。
我发现它对于单元测试非常方便,因为我不想用很多小数位来硬编码测试结果值。