Actualmente estoy estudiando el framework Mockito y he creado varios casos de prueba usando Mockito. Pero luego leí que en vez de invocar maqueta (SomeClass .class) que puede utilizar el @Mock
y la @InjectMocks
- Lo único que tengo que hacer es anotar mi clase de prueba con @RunWith(MockitoJUnitRunner.class)
o utilizar el MockitoAnnotations.initMocks(this);
en el método @Before
.Usando @Mock y @InjectMocks
Pero no funciona - ¡Parece que el @Mock
no funcionará! Aquí están mis 2 revisiones de códigos: una que usa las anotaciones y otra que no.
¿Qué estoy haciendo mal?
public class ReportServiceImplTestMockito {
private TaskService mockTaskService; // This is the Mock object
private ReportServiceImpl service;
@Before
public void init(){
service = new ReportServiceImpl();
mockTaskService = mock(TaskServiceImpl.class);
service.setTaskServiceImpl(mockTaskService);
}
/// ...
Some tests
}
Como dije, este es un trabajo excelente. Pero el siguiente planteo:
@RunWith(MockitoJUnitRunner.class)
public class ReportServiceImplTestMockito {
@Mock
private TaskService mockTaskService;
@InjectMocks
private ReportServiceImpl service;
// Some tests
}
Y aquí es la clase ReportServiceImpl
:
@Service
public class ReportServiceImpl implements ReportService {
@Autowired
private TaskService taskServiceImpl;
public ReportServiceImpl(){}
public ReportServiceImpl(TaskService taskService){
this.taskServiceImpl = taskService;
}
public void setTaskServiceImpl(TaskService taskServiceImpl) {
this.taskServiceImpl = taskServiceImpl;
}
}
¿Qué me falta?
Me parece bien, a primera vista. ¿Qué es exactamente lo que está mal para ti? –
@Noam ¿Seguro que está utilizando las importaciones correctas? – Brice
David - Recibo una NullPointerException. Y Brice, creo que estoy usando las importaciones correctas, aquí están 'import org.jmock.auto.Mock; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.MockitoAnnotations; import org.mockito.runners.MockitoJUnitRunner; ' – Noam