J'étudie actuellement le framework Mockito et j'ai créé plusieurs cas de test en utilisant Mockito. Mais je lis que, au lieu d'invoquer la maquette (SomeClass .class) Je peux utiliser la @Mock
et la @InjectMocks
- La seule chose que je dois faire est de annoter ma classe de test avec @RunWith(MockitoJUnitRunner.class)
ou utiliser le MockitoAnnotations.initMocks(this);
dans la méthode @Before
.Utiliser @Mock et @InjectMocks
Mais cela ne fonctionne pas - Il semble que le @Mock
ne fonctionnera pas! Voici mes 2 révisions de codes - une utilisant les annotations et une sans.
Qu'est-ce que je fais 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
}
Comme je l'ai dit - cela fonctionne très bien. Mais la coutume suivante:
@RunWith(MockitoJUnitRunner.class)
public class ReportServiceImplTestMockito {
@Mock
private TaskService mockTaskService;
@InjectMocks
private ReportServiceImpl service;
// Some tests
}
Et voici 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;
}
}
Qu'est-ce que je manque?
Cela me semble OK, à première vue. Qu'est-ce qui ne va pas pour toi? –
@Noam Êtes-vous sûr d'utiliser les bonnes importations? – Brice
David - J'obtiens une exception NullPointerException. Et Brice, je crois que j'utilise les bonnes importations - ici elles sont 'import org.jmock.auto.Mock; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.MockitoAnnotations; import org.mockito.runners.MockitoJUnitRunner; ' – Noam