Java - модульное тестирование пустого метода с использованием Matchers - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь проверить метод void, такой как:

@Override
    public void onApplicationEvent(ApplicationEvent myEvent) {
        if (myEvent instanceof ApplicationEnvironmentPreparedEvent) {
            ConfigurableEnvironment myEnv= ((ApplicationEnvironmentPreparedEvent) myEvent).getEnvironment();
            setSystemVariables(myEnv);
        }

    }

Я использую Matchers, а вот модульный тест (который явно ничего не тестирует)

@Test
    public void testOnApplicationEvent() {
        loggingListener.onApplicationEvent(any(ApplicationEnvironmentPreparedEvent.class));
    }

Два вопроса: 1. Ошибка, которую я получаю из сборки: «Недопустимое использование Matchers», и тест не проходит в моей сборке Jenkins (но проходит в идее IDE) 2. Как проверить эти методы, чтобы сохранить процент покрытия тестами до желаемого уровня

1 Ответ

0 голосов
/ 20 января 2019

1 - эта проблема, поскольку any используется неправильно. Подробнее см. Руководство Mockito. Ниже мой пример не использует any и проблема исчезнет.

2 - Чтобы охватить 2 ветви if, я бы порекомендовал ниже тестовые случаи.

@Test
public void onApplicationEventShouldSetEnvironmentWhenApplicationEnvironmentPreparedEvent() {
    ConfigurableEnvironment actualEnvironment = null;

    // Given a listener with overridden setSystemVariables() to store passed env.
    LoggingListener loggingListener = new LoggingListener() {
        @Override
        void setSystemVariables(ConfigurableEnvironment var){
            actualEnvironment = var;
        }
    };

    // Given some dummy environment which is delivered by an event.
    ConfigurableEnvironment expectedEnvironment = new ConfigurableEnvironment();

    // Given a mocked event with above dummy environment.
    ApplicationEvent mockedEvent = Mockito(ApplicationEnvironmentPreparedEvent.class);
    Mockito.when(mockedEvent.getEnvironment()).returns(expectedEnvironment);

    // When call a method under test
    loggingListener.onApplicationEvent(mockedEvent);

    // Then make sure the given environment was passed and set correctly
    assertSame(expectedEnvironment, actualEnvironment);
}

@Test
public void onApplicationEventShouldSkipNotApplicationEnvironmentPreparedEvent() {
    // Given a listener with overridden setSystemVariables() to fail the test if called.
    LoggingListener loggingListener = new LoggingListener() {
        @Override
        void setSystemVariables(ConfigurableEnvironment var){
            fail("This method should not be called");
        }
    };

    // Given a mocked other (not ApplicationEnvironmentPreparedEvent) event.
    ApplicationEvent mockedEvent = Mockito(UnknownEvent.class);

    // When call a method under test
    loggingListener.onApplicationEvent(mockedEvent);

    // Then make sure an environment was not asked at all.
    Mockito.verify(mockedEvent.getEnvironment(), never);
}

Обратите внимание, это не компилируемый код, потому что я не знаю вашего полного производственного кода, поэтому воспринимайте это как идею применить его к реальному коду с соответствующими изменениями.

...