À l'aide de @Mock et @InjectMocks
Je suis en train d'étudier la Mockito cadre et j'ai créé plusieurs cas de test à l'aide de Mockito.
Mais ensuite j'ai lu qu'au lieu de l'invocation de la maquette(SomeClass.classe), je peux utiliser les @Mock
et la @InjectMocks
- La seule chose que je dois faire est d'annoter ma classe de test avec @RunWith(MockitoJUnitRunner.class)
ou utiliser le MockitoAnnotations.initMocks(this);
dans le @Before
méthode.
Mais il ne fonctionne pas - Il semble que le @Mock
ne marchera pas!
Voici mes 2 codes de révisions - un en utilisant les annotations et l'autre sans.
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 - ce de l'excellent travail.
Mais la suite de l'habitude:
@RunWith(MockitoJUnitRunner.class)
public class ReportServiceImplTestMockito {
@Mock
private TaskService mockTaskService;
@InjectMocks
private ReportServiceImpl service;
//Some tests
}
Et voici le ReportServiceImpl
classe:
@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;
}
}
Ce qui me manque?
- Semble OK pour moi, au premier coup d'œil. Ce qui se passe vraiment mal pour vous?
- Êtes-vous sûr d'utiliser le bon importations ?
- David - je suis un NullPointerException. Et Brice, je crois que je suis en utilisant le droit des importations - ici, ils sont 'import org.jmock.auto.Maquette; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.MockitoAnnotations; import org.mockito.les coureurs.MockitoJUnitRunner;'
Vous devez vous connecter pour publier un commentaire.
O. K, j'ai obtenu mon erreur!!!
J'ai utilisé le
@InjectMocks
, mais il est initialisé à la même variable dans la méthode init ()...Donc, ce qui s'est passé, mockito injecté les objets fantaisie à ma variable mais quelques secondes plus tard, j'ai couru sur - l'initialisation de cette même variable!!!
Votre code fonctionne très bien pour moi à l'aide de Mockito 1.9.
À l'aide d'un 1.8+ version de Mockito-je obtenir un très spécifiques message d'erreur me disant exactement comment résoudre le problème. En tant que programmeur php suggère: Pour Mockito de 1,8+, vous devez initialiser le champ.
Avez-vous vu ou tout autre message d'erreur?
Edit:
Le code suivant fonctionne pour moi. De petits changements:
TaskService
System.out.println
T-il produire une erreur pour vous? :
Service:
Dépendance:
Test, estampes
mockTaskService
:Je ne suis pas sûr, mais essayez de créer une nouvelle instance de
ReportServiceImpl
manuellement (comme vous l'avez fait dans l'exemple):MockitoAnnotations.initMocks(this)
dans ce cas, vous devez instancier avant qui est appelé.