Конструктор JMockit mock

Я тестирую модуль класса, который имеет сложный конструктор (с большим количеством параметров). Конструктор принимает три аргумента типа:

public BehavioralDischargeCarePlan_Bus(Webform webForm,String dataEntryModel, String     obsBatId) {

    super(webForm, dataEntryModel, obsBatId);
.....

Затем конструктор вызывает супер конструктор, который становится еще более сложным. Используя JMockit, как я могу создать экземпляр класса и протестировать метод без фактического вызова конструкторов? Я новичок в JMockit, любая помощь будет оценена по достоинству.

Спасибо!

Ответ 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.