Каждый раз возвращайте разные значения из ожидания jMockit

У меня есть модульный тест, в котором я издеваюсь над классом java.net.URI. Кроме того, я создаю jMockit NonStrictExpectation, где я ожидаю вызова URI.getPath() и возврата определенной строки.

Тестируемый код дважды вызывает URI.getPath(), где мне нужно каждый раз отправлять другую строку.

Вот мой фактический тестируемый метод:

public void validateResource() {
    // some code
    URI uri = new URI(link1.getHref());
    String path1 = uri.getPath();
    // some more code
    uri = new URI(link2.getHref());
    String path2 = uri.getPath();
}

Вот код модульного теста:

@Mocked URI uri;

@Test
public void testValidateResource() {
    new NonStrictExpectations() {
        {
            // for the first invocation
            uri.getPath(); returns("/resourceGroup/1");

            // for the second invocation [was hoping this would work]
            uri.getPath(); returns("/resource/2");
        }
    };
    myObject.validateResource();
}

Теперь я хочу, чтобы "/resource/2" возвращалось из моего ожидания, когда URI.getPath() вызывается во второй раз. Но он всегда соответствует первому ожиданию и возвращает "/recourceGroup/1". Это моя проблема.

Как мне это сделать? Я не могу использовать StrictExpectations по ряду причин, и мне придется придерживаться NonStrictExpectations.


person Nagendra U M    schedule 22.10.2012    source источник


Ответы (1)


Похоже, вам просто нужно указать uri.getPath() один раз и использовать версию returns с переменным аргументом... что-то вроде этого:

uri.getPath(); returns("/resourceGroup/1", "/resourceGroup/2");

Во всяком случае, это согласно документации... Я сам не проверял. .

Несколько последовательных значений для возврата можно записать для ожидания, вызвав метод return(v1, v2,...). Кроме того, того же можно добиться, назначив полю result список или массив, содержащий последовательные значения.

person Jeff Olson    schedule 23.10.2012