Se ho capito bene, vuoi testare una classe con un costruttore mocked. Questo non è un buon approccio ai test perché non si sta testando il codice di produzione nella sua forma più pura.
Tuttavia, non tutto va secondo le regole, vero? :) Quindi se insisti, JMockIt ti permetterà di farlo. Puoi prendere in giro solo il costruttore e testare gli altri metodi. I costruttori di derisione sono ben documentati allo JMockIt project site.
Ecco una rapida dimostrazione si può provare da soli: il codice
Produzione:
// src/main/java/pkg/SomeClass.java
public class SomeClass {
public static void main(String[] args) {
new SomeClass("a", 2);
}
public SomeClass(String a, Integer b) {
System.out.println("Production constructor called");
}
}
Codice Mock: Codice
// src/test/java/pkg/SomeMock.java
import mockit.Mock;
import mockit.MockUp;
public class SomeMock extends MockUp<SomeClass> {
@Mock
public void $init(String a, Integer b) {
System.out.println("Mock constructor called");
}
}
prova:
// srce/test/java/pkg/SomeTest.java
import org.junit.Test;
public class SomeTest {
@Test
public void test() {
new SomeMock();
new SomeClass("a", 2);
}
}
Esecuzione del produzione il codice verrà stampato Production constructor called
, ma eseguendolo sotto test verrà stampato Mock constructor called
.
Grazie per la risposta. Lo proverei. – userx
'Se ho capito bene, vuoi testare una classe con un costruttore mocked. Questo non è un buon approccio ai test perché non stai testando il codice di produzione nella sua forma più pura. Non sono assolutamente d'accordo. Test unitario (test white box - che è quello per cui JMockit è usato) nella sua forma più pura è quello di testare le singole unità. Se si sta testando una particolare unità che non è un costruttore complesso, allora consentirne l'esecuzione è un test della scatola nera che è incredibilmente brutto da fare quando si tenta di eseguire il test dell'unità. – searchengine27
ma come si impostano i campi dell'oggetto quando si prende in giro il costruttore (all'interno del metodo $ init())? – supertonsky