MyClass остается издевательским между двумя тестами

У меня есть два тестовых класса, MyFirstTest и MySecondTest. Запуск каждого независимо работает нормально. Когда я запускаю оба (в eclipse выберите тестовую папку, содержащую эти файлы, щелкните правой кнопкой мыши, запустите как junit), MySecondTest терпит неудачу, потому что MyClass все еще издевается, когда он запускает свои тесты. MyFirstTest требует, чтобы MyClass был имитирован. MySecondTest требует, чтобы MyClass не подвергался насмешкам. Я думал, что tearDownMocks должен «демокировать» классы.

public class MyFirstTest {
    @Before
    public void setUp() throws Exception {
        Mockit.setUpMocks(MockMyClass.class);
    }
    @After
    public void tearDown() throws Exception {
        Mockit.tearDownMocks(MockMyClass.class);
    }
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        Mockit.tearDownMocks(MockMyClass.class);
    }
    @MockClass(realClass = MyClass.class, stubs = "<clinit>")
    public static class MockMyClass {
...


public class MySecondTest {

person user1346730    schedule 20.04.2012    source источник
comment
'Ну, я обнаружил, что добавление Mockit.tearDownMocks(); в метод setUp классов MySecondTest (который аннотирован Before), сбрасывает макеты, чтобы он не использовал макет из предыдущего класса. Не уверен, почему вызовы Mockit.tearDownMocks(MockMyClass.class) из методов, аннотированных After и AfterClass, падают...'   -  person user1346730    schedule 20.04.2012


Ответы (2)


Правильный способ сделать это, как указано ниже: смоделируйте класс и назначьте его переменной. А затем, используя эту переменную, вы можете уничтожить или очистить макет, чтобы он не влиял на другие тестовые примеры.

MockUp<PmRequestData> mockpmreq = new MockUp<PmRequestData>() {
        @Mock
        public Map<String, KPIData> getKpiDataMap() {
            return datamap;
            }
        };
mockpmreq.tearDown();
person Gauranga    schedule 22.09.2017

Метод Mockit.tearDownMocks() принимает настоящие классы, а не макеты. Итак, правильный код будет таким:

Mockit.tearDownMocks(MyClass.class);
person Boris Brodski    schedule 28.11.2012
comment
Эта функция устарела. Теперь вы должны вызвать .tearDown в фиктивном классе. Кроме того, в JUnit это должно выполняться между тестами автоматически. - person keaplogik; 09.02.2015