Mockito: ¿Cómo poner a prueba mi servicio con burla?
Pregunta
Soy nuevo en las pruebas de simulacro.
Quiero probar mi método de servicio CorrectionService.correctPerson(Long personId)
.
La aplicación aún no está escrito pero este lo que hará:
CorrectionService
llamará a un método de AddressDAO
que eliminará algunos de los Adress
que tiene Person
. Una Person
tiene muchos Address
es
No estoy seguro de cuál es la estructura básica debe ser de mi CorrectionServiceTest.testCorrectPerson
.
También por favor / No confirmar que en esta prueba no necesito probar si las direcciones se eliminan realmente (se debe hacer en un AddressDaoTest
), sólo que el método DAO estaba siendo llamado.
Gracias
Solución
Una versión simplificada de la clase CorrectionService (modificadores de visibilidad eliminan por simplicidad).
class CorrectionService {
AddressDao addressDao;
CorrectionService(AddressDao addressDao) {
this.addressDao;
}
void correctPerson(Long personId) {
//Do some stuff with the addressDao here...
}
}
En la prueba:
import static org.mockito.Mockito.*;
public class CorrectionServiceTest {
@Before
public void setUp() {
addressDao = mock(AddressDao.class);
correctionService = new CorrectionService(addressDao);
}
@Test
public void shouldCallDeleteAddress() {
correctionService.correct(VALID_ID);
verify(addressDao).deleteAddress(VALID_ID);
}
}
Otros consejos
versión más limpia:
@RunWith(MockitoJUnitRunner.class)
public class CorrectionServiceTest {
private static final Long VALID_ID = 123L;
@Mock
AddressDao addressDao;
@InjectMocks
private CorrectionService correctionService;
@Test
public void shouldCallDeleteAddress() {
//when
correctionService.correct(VALID_ID);
//then
verify(addressDao).deleteAddress(VALID_ID);
}
}