Mockito Pases pero todavía baja cobertura de código
Pregunta
package com.fitaxis.test;
import java.sql.SQLException;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import static org.mockito.Mockito.*;
import com.fitaxis.leaderboard.LeaderBoard;
public class LeaderBoardTests {
@Test
public void TestThatDataIsSavedToTheDatabase()
{
LeaderBoard leaderBoard = mock(LeaderBoard.class);
//doNothing().doThrow(new RuntimeException()).when(leaderBoard).saveData();
when(leaderBoard.saveData()).thenReturn(true);
boolean res = leaderBoard.saveData();
verify(leaderBoard).saveData();
Assert.assertTrue(res);
}
}
he utilizado Mockito para burlarse de una clase, pero cuando se utiliza la cobertura de código que no detecta que el método que se ha llamado. ¿Estoy haciendo algo mal? Por favor, ayuda!
Solución
Parece que estás burlando a cabo el único que está haciendo llamar al código de producción.
En otras palabras, la prueba dice:
- Cuando llamo
saveData()
, falsificar el resultado a devolver true - Ahora llamar
saveData()
- yay, el resultado era verdad
No es de tu código de producción está siendo llamadas en absoluto, por lo que yo puedo ver.
El punto de burla es para burlarse a cabo las dependencias de su clase de producción, o (a veces, aunque prefiero no) para burlarse de algunos métodos de la clase de producción que el código que en realidad está probando llamará.
Debe probablemente burlarse de las dependencias de Leaderboard
en lugar de Leaderboard
sí. Si debe burlarse cabo saveData()
, usted debe estar probando los métodos que llamada saveData()
... cheque que guardar los datos correctos, que actúan correctamente cuando se vuelve saveData()
falsa, etc.
Otros consejos
Si entiendo bien su pregunta:
porque se está burlando de clasificación. Eso significa que no está probando la misma.
Si desea probar clasificación, se debe probar no la clase real el burlado.
Vamos a decir que desea una clase de prueba, pero esto depende de la clase B y B es un poco difícil para crear una instancia en la prueba de medio ambiente (por cualquier motivo). en tales casos se puede burlarse B.
pero aquí es el caso de que se están burlando de clase en sí una. Esto significa que no está probando nada.
clase corredor complemento como MockitoJUnitRunner, consulte el siguiente código de ejemplo
import org.mockito.junit.MockitoJUnitRunner
@RunWith(MockitoJUnitRunner.class)
public class MockitTesterClass{
@Mock
private TestService testServiceMock;
}
Ahora la cobertura de código aumentará