Attualmente sto studiando il framework Mockito e ho creato diversi casi di test utilizzando Mockito. Ma poi ho letto che invece di invocare finta (SomeClass .class) posso usare il @Mock
e @InjectMocks
- L'unica cosa che devo fare è di annotare la mia classe di test con @RunWith(MockitoJUnitRunner.class)
o utilizzare il MockitoAnnotations.initMocks(this);
nel metodo @Before
.Utilizzo di @Mock e @InjectMocks
Ma non funziona - Sembra che lo @Mock
non funzioni! Ecco le mie 2 revisioni di codici: uno che utilizza le annotazioni e uno senza.
Cosa sto sbagliando?
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
}
Come ho detto, questo funziona benissimo. Ma il seguente wont:
@RunWith(MockitoJUnitRunner.class)
public class ReportServiceImplTestMockito {
@Mock
private TaskService mockTaskService;
@InjectMocks
private ReportServiceImpl service;
// Some tests
}
E qui è la classe 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;
}
}
Che cosa mi manca?
Mi sembra OK, a prima vista. Cosa ti sta male esattamente? –
@Noam Sei sicuro di utilizzare le importazioni corrette? – Brice
David - Ricevo una NullPointerException. E Brice, credo che sto usando le giuste importazioni - qui sono 'import org.jmock.auto.Mock; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.MockitoAnnotations; import org.mockito.runners.MockitoJUnitRunner; ' – Noam