java - tutorial - pruebas unitarias
¿Por qué mi assertEquals() está en desuso en JUnit? (3)
Me preguntaba por qué assertEquals(double, double)
está en desuso.
Utilicé import static org.junit.Assert.assertEquals;
y utilicé JUnit 4.11.
A continuación se muestra mi código:
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()
devuelve un valor doble.
¿Qué podría estar mal?
Está en desuso debido a los problemas de precisión del doble.
Si observa, hay otro método assertEquals(double expected, double actual, double delta)
que permite una pérdida de precisión delta
.
JavaDoc :
Afirma que dos dobles son iguales dentro de un delta positivo. Si no lo son, se lanza un error de afirmación. Si el valor esperado es infinito, entonces se ignora el valor delta.NaNs se consideran iguales:
assertEquals(Double.NaN, Double.NaN, *)
pasa...
delta: el delta máximo entre esperado y real para el cual ambos números aún se consideran iguales.
La gente explica pero no da muestras ... Así que aquí va lo que funcionó para mí:
@Test
public void WhenMakingDepositAccountBalanceIncreases() {
Account account = new Account();
account.makeDeposit(10.0);
assertEquals("Account balance was not correct.", 10.0, account.getBalance(), 0);
}
El 0
al final;
assertEquals(double, double)
está en desuso porque los 2 dobles pueden ser iguales, pero si son valores calculados, el procesador puede hacerlos valores ligeramente diferentes.
Si lo intentas, fallará: assertEquals(.1 + .7, .8)
. Esto fue probado utilizando un procesador Intel® .
Llamar al método en desuso activará el fail("Use assertEquals(expected, actual, delta) to compare floating-point numbers");
ser llamado.