Mockito es un marco de prueba de código abierto que se utiliza para la prueba unitaria de aplicaciones Java. Desempeña un papel vital en el desarrollo de aplicaciones comprobables. Mockito se usa para simular interfaces para que se pueda agregar una funcionalidad ficticia a una interfaz simulada que se puede usar en pruebas unitarias. La prueba unitaria es un tipo de prueba de software en la que se prueban componentes de software individuales. El objetivo principal de usar el marco Mockito es simplificar el desarrollo de una prueba burlándose de las dependencias externas y usándolas en el código de prueba. Y como resultado, Mockito proporciona un código de prueba más simple que es más fácil de entender, más legible y modificable. Mockito también se puede usar con otros marcos de prueba como JUnit y TestNG. Entonces, en este artículo, discutiremos las diferencias entre @Mock y@InjectMocks , que son las dos anotaciones más importantes y confusas que están disponibles en el marco Mockito.
Diferencia principal
Si estamos hablando de la principal diferencia, entonces en términos simples podemos decir
@Mock crea un simulacro y @InjectMocks crea una instancia de la clase e inyecta los simulacros creados con las anotaciones @Mock en esta instancia.
Entendamos la declaración anterior con un ejemplo simple en Java .
Comprender la diferencia con un ejemplo
Supongamos que tenemos dos clases llamadas Student y Pen . Y el código para ambas clases es el siguiente
Estudiante.java Clase:
Java
class Student { private Pen pen; public Student(Pen pen) { this.pen = pen; } public String write() { return "Student Write with: " + pen.getRedPen(); } }
Clase Pen.java:
Java
class Pen { private String redPen; public Pen(String redPen) { this.redPen = redPen; } String getRedPen() { return redPen; } }
En el código anterior, puede ver que la clase Student necesita Pen para realizar la operación de escritura . Ahora realicemos pruebas unitarias para la clase Student.java .
StudentTest.java Clase:
Java
@RunWith(MockitoJUnitRunner.class) class StudentTest { @Mock Pen pen; @InjectMocks Student student; @Test public void writeWithPenTest() throws Exception { Mockito.when(pen.getRedPen()).thenReturn("Red Pen"); assertEquals("Student Write with: Red Pen", student.write()); } }
Entonces, lo que sucede en el código es que Mockito se burlará de una clase Pen y su comportamiento usando el método when y thenReturn . Y, por último, usar @InjectMocks Mockito pondrá ese Pen en la clase Student. Y una cosa más que puede notar es que ni siquiera tiene que crear un nuevo objeto Estudiante. Mockito lo inyectará por ti.
// we don't have to do this Student student = new Student(pen);
Tabla de diferencias
@Imitar |
@InyectarMocks |
---|---|
@Mock crea un simulacro. | @InjectMocks crea una instancia de la clase e inyecta los simulacros creados con las anotaciones @Mock en esta instancia. |
@Mock se utiliza para crear simulacros necesarios para respaldar las pruebas de la clase que se va a probar. | @InjectMocks se usa para crear instancias de clase que deben probarse en la clase de prueba. |
Clase anotada para probar las dependencias con la anotación @Mock. | @InjectMocks se usa cuando el cuerpo del método real debe ejecutarse para la clase dada. |
Debemos definir los métodos when-thenReturn para objetos simulados y qué métodos de clase se invocarán durante la ejecución de la prueba real. | Use @InjectMocks cuando necesite que todas las dependencias internas se inicialicen con objetos simulados para que el método funcione correctamente. |
Publicación traducida automáticamente
Artículo escrito por AmiyaRanjanRout y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA