Удаление ранее определенных ожиданий в JMockit - PullRequest
6 голосов
/ 10 февраля 2011

У меня есть объект, над которым я работаю с JMockit NonStrictExcpection() в методе @Before / setUp() моего тестового класса, чтобы он возвращал значение, ожидаемое для нормального выполнения моего тестируемого класса.

Это нормально для всех моих методов тестирования, за исключением одного теста, в котором я хочу проверить нестандартную работу этого кода.

Я попытался создать новое ожидание в методе теста, которыйЯ полагал, что переопределил бы ожидание в методе setUp, но я обнаружил, что ожидание в методе setUp подавляет новое ожидание.

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

Как мне кодировать свой класс тестирования, чтобы можно было правильно определить ожидания для каждого теста с минимальным количеством кода? (я знаю, что яможно скопировать / вставить код ожидания в каждый метод теста, , но я не хочу делать это , если его вообще можно избежать).

Мой код теста воток как-то так (заметьте, это sorta psuedocode и не компилируется, но вы поняли):

public class TestClass{

    @Before
    public void setUp(){

        // Here I define the normal behaviour of mockObject
        new NonStrictExpectations() {{
            mockObject.doSomething();
            result = "Everyting is OK!";
        }};

        // Other set up stuff...

    }

    // Other Tests...

    /**
     * This method tests that an error when calling 
     * mockObject.doSomething() is handled correctly.
     */
    @Test(expected=Exception.class)
    public void testMockObjectThrowsException(){

        // This Expectation is apparently ignored...
        new NonStrictExpectations() {{
            mockObject.doSomething();
            result = "Something is wrong!";
        }};

        // Rest of test method...

    }
}

Ответы [ 2 ]

6 голосов
/ 14 февраля 2011

Я обычно просто делаю закрытый метод, который возвращает тип Expectations:

private Expectations expectTheUnknown()
{
    return new NonStrictExpectations()
    {{
        ... expectations ...
    }};
}

И затем просто вызываю метод в тестовых методах, которые требуют точного ожидания:

@Test public void testUknown()
{
    expectTheUnknown();
    ... here goes the test ...
}
0 голосов
/ 01 октября 2015

Вы можете лучше использовать MockUp для тестирования на основе состояния.Определите макет, который вы хотите в каждом методе испытаний.Вы можете вызвать метод tearDown в MockUp, чтобы удалить макет в конце каждого теста.

Он описан здесь

...