Sono di fronte a un problema con i test di Mockito junit. Sono nuovo ad esso e sono un po 'confuso con il problema che sto affrontando. Qualsiasi aiuto su questo sarebbe apprezzato.Mockito NotaMockException
class Activity{
public void firstMethod(){
String str = secondMethod();
}
public String secondMethod(){
String str = null;
/* some Code */
return str;
}
}
Ottenere eccezione:
*org.mockito.exceptions.misusing.NotAMockException:
Argument passed to when() is not a mock!*
nel seguente codice
class ActivityTest(){
Activity act;
@Before
public void setup(){
act = new Activity();
}
@Test
public void testFirstMethod(){
Mockito.doReturn(Mockito.anyString()).when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
Sono consapevole che l'attività non è una finta, ma io non sono sicuro di un modo per aggirare questo come secondMethod()
è un metodo nella stessa classe. Devo scrivere la regola per secondMethod()
poiché ho già eseguito il test delle unità. La definizione di secondMethod()
include dipendenze esterne. Devo prendere in giro le dipendenze esterne presenti in secondMethod()
e scrivere regole per loro piuttosto che governare per secondMethod()
?
Ho trovato questo post: Mockito Spy'ing on the object being unit tested Tuttavia separare il secondoMetodo() in una classe diversa non ha senso. Il mio metodo è legato a questa classe. Creare una classe diversa per i test non mi sembra giusta. Anche deridere la classe reale usando spy() non è il modo più corretto come già spiegato nel post.
Non penso che dovrei creare una simulazione della classe Activity in quanto è la classe che sto testando. Apprezzerei molto l'aiuto e le intuizioni su questo.
Non dovresti _mock_ away dei metodi della classe sotto test. E hai ragione - non dovresti prendere in giro la classe stessa. Invece, il mocking è progettato per sostituire tutti i collaboratori della classe sotto test. Quindi se la tua classe dipende da altre classi le cui istanze sono usate nei tuoi metodi, allora basta deridere quei collaboratori. – Seelenvirtuose
L'eccezione è abbastanza chiara, l'atto non è un mock, quindi no quando() su di esso. Alcuni [doc] (https: // github.com/mockito/mockito/wiki/FAQ) dovresti leggere IMHO –