Макет JMockit не уничтожается

Использование JUnit для тестирования классов-

Иметь класс TestAccess.java с

static private TestAccess instance = new TestAccess();
public static TestAccess getTestAccess() {
    returns instance;
}

Для тестирования тестового класса A.java использовался JMockit для имитации метода getTestAccess.

@Mock
TestAccess mockTestaccess;    

@Test
public void testMethod() {
    new MockUp<TestAccess>() {
        @mockit.Mock
        public TestAccess getTestAccess() {
            return mockTestaccess;
        }
    };

    TestAccess test=TestAccess.getTestAccess();
}

В другом классе B.java я не хочу использовать макет и вызывать TestAccess.java следующим образом

@Test
public void doTest()
{ 
    TestAccess test=TestAccess.getTestAccess();
}

B.java при независимом запуске реальный экземпляр TestAccess возвращается и работает нормально.

Однако во время запуска maven он терпит неудачу, так как даже в B.java TestAccess.getTestAccess() возвращает макет, определенный в A.java, а не реальный экземпляр, как ожидалось.

Может ли кто-нибудь подсказать, как это можно решить.


person Community    schedule 31.08.2016    source источник


Ответы (1)


на самом деле ваш пример даже не запустится, так как аннотация @Mock в поле mockTestaccess недействительна. Я думаю, это должно быть @Mocked? И если это так, нет необходимости дополнительно использовать new MockUp(), так как @Mocked на mockTestaccess уже имитирует все экземпляры TestAccess во время тестов этого тестового класса, а затем автоматически возвращается. Если проблема в том, что getTestAccess() возвращает некоторый подкласс TestAccess, который тогда не является издевательским экземпляром, вы можете взглянуть на @Capturing, который также издевается над экземплярами подклассов.

person Vampire    schedule 31.08.2016
comment
Я использую Junit для модульного тестирования. Используйте @mock(org.mockito.Mock), чтобы издеваться над экземпляром. Поскольку я хотел смоделировать статический метод, я использовал jMockito (mockit.MockUp). Только что отредактировал приведенное выше заявление, включив в него mockit.MockUp, который я пропустил. Также запускаются тестовые случаи. - person ; 01.09.2016
comment
Вы смешиваете две разные фреймворки? Почему так? Я бы рекомендовал не смешивать насмешливые фреймворки, а использовать только JMockit. - person Vampire; 01.09.2016