Когда вы вызываете Mockito.mock(SomeType.class)
, Mockito будет динамически создавать подкласс для этого типа, но для создания экземпляров он использует определенные методы, чтобы избежать вызова супер-конструктора ( read more ).
Попробуйте это:
public class Foobar {
public Foobar () {
throw new RuntimeException();
}
}
// Somewhere else ...
Mockito.mock(Foobar.class); // No exception will be thrown because constructor is never called
Это имеет смысл, когда вы думаете об этом: свежий фиктивный объект не должен ничего делать, если это абсолютно не требуется (заглушка).Вызов любой реальной логики может иметь нежелательные побочные эффекты.
И именно поэтому вы никогда не издеваетесь над самим тестируемым классом!
Когда вы высмеиваете сам тестируемый класс, ваши тесты имеютабсолютно никакого значения вообще!
Только ложные зависимости.
Ваш класс Game
не имеет зависимостей, поэтому вам не понадобятся никакие насмешки:
@Test
public void testGameConstruction() {
Game game = new Game();
assertTrue(game.isInGame());
}
Если у Game
есть зависимости, например Hand
, вы можете добавить параметры конструктора:
public Game (Hand hand1, Hand hand2) { .... }
, а затем:
@Test
public void testGameConstruction() {
Hand handMock1 = Mockito.mock(Hand.class);
Hand handMock2 = Mockito.mock(Hand.class);
Game game = new Game(handMock1, handMock2);
verify(handMock1, times(1)).hit();
verify(handMock2, times(1)).hit();
}