2011-11-09 12 views
5

Sto testando un metodo con alcune operazioni di serializzazione. Intendo prendere in giro la logica di serializzazione. Il codice è il seguente:jMockit: come prevedere le chiamate del costruttore su oggetti Mocked?

ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file))); 

ho creato i seguenti oggetti mock:

@Mocked FileInputStream mockFIS; 

@Mocked BufferedInputStream mockBIS; 

@Mocked ObjectInputStream mockOIS; 

Ho installato un blocco NonStrictExpectations() dove voglio aspettare le chiamate costruttore di cui sopra.

Qualche idea su come posso raggiungere questo obiettivo?

risposta

10

È possibile specificare un set completo di Aspettative per un determinato set di interazioni. Da Behavior-based testing with JMockit:

Una possibile prova per il metodo doSomething() può esercitare il caso in cui SomeCheckedException viene buttato, dopo un numero arbitrario di iterazioni riuscite. Supponendo che vogliamo (per qualsiasi motivo) per record di un set completo di aspettative per l'interazione tra queste due classi, si potrebbe scrivere il test di seguito:

@Test 
public void doSomethingHandlesSomeCheckedException() throws Exception 
{ 
    new Expectations() { 
    DependencyAbc abc; 

    { 
     new DependencyAbc(); // expect constructor 

     abc.intReturningMethod(); result = 3; 

     abc.stringReturningMethod(); 
     returns("str1", "str2"); 
     result = new SomeCheckedException(); 
    } 
    }; 

    new UnitUnderTest().doSomething(); 
} 
+2

Dopo "abc" è costruito, si può prova che è passato in qualche altro metodo? def.someMethod (abc)? Sto avendo problemi con questo perché i riferimenti non sono uguali. –

Problemi correlati