Должен ли mockito вызывать конструктор по умолчанию для mocked-класса? - PullRequest
8 голосов
/ 24 августа 2011

Я пытаюсь создать фиктивный объект Mockito класса с довольно тяжелым поведением сети и транзакций, с которым я не хочу иметь дело в текущем модульном тесте, который я пишу. Однако похоже, что Mockito вызывает конструктор по умолчанию для реального класса при создании экземпляра фиктивного объекта. Конструктор по умолчанию делает все, что вызывает проблемы в контексте этого модульного теста.

Должен ли Mockito вызывать конструктор по умолчанию? И есть ли способ избежать такого поведения?

Вот как я создаю фиктивный объект:

ConcreteClassWithComplexDefaultConstructor mockObject = mock(ConcreteClassWithComplexDefaultConstructor.class);

РЕДАКТИРОВАТЬ: Итак, я понял, что происходит. Конструктор по умолчанию для конкретного класса не вызывается (как указывал Лучано). Однако вызывается статический конструктор класса. Насколько я знаю, статические вещи и Mockito работают не очень хорошо, но есть ли способ справиться с этим, то есть заставить их игнорировать статический конструктор. Однако у меня не очень большие надежды ...

Ответы [ 2 ]

9 голосов
/ 24 августа 2011

Ну, оказывается, я был не прав. Mockito использует CGLib и Objenesis для создания объекта. Если вы перейдете по этой ссылке, она объяснит, как не вызывает конструктор суперкласса.

Это легко проверить с помощью следующего кода:

public class Test
  public Test() {
    // Never called.
    System.out.println("Constructor was called.");
  }

  public static void main(String[] args) {
    Test test = mock(Test.class);
  }
6 голосов
/ 24 августа 2011

Нет, Mockito не вызывает конструктор по умолчанию для смоделированного класса.

...