Ответ 1
Если я понял вас правильно, вы хотите протестировать класс с издеваемым конструктором. Это не очень хороший подход к тестированию, потому что вы не тестируете производственный код в его самой чистой форме.
Однако не все идет по правилам, не так ли?:) Итак, если вы настаиваете, JMockIt позволит вам это сделать. Вы можете высмеять только конструктор и проверить другие методы. Издевательские конструкторы хорошо документированы на веб-сайте JMockIt.
Вот быструю демонстрацию, которую вы можете попробовать сами:
Производственный код:
// 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");
}
}
Макет кода:
// 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");
}
}
Тестовый код:
// srce/test/java/pkg/SomeTest.java
import org.junit.Test;
public class SomeTest {
@Test
public void test() {
new SomeMock();
new SomeClass("a", 2);
}
}
Запуск производственного кода будет печатать Production constructor called
, но при запуске его теста будет напечатано Mock constructor called
.