Unit testing Java-使用匹配器对void方法进行单元测试

Unit testing Java-使用匹配器对void方法进行单元测试,unit-testing,junit,mockito,matcher,Unit Testing,Junit,Mockito,Matcher,我正在尝试测试一个void方法,例如: @Override public void onApplicationEvent(ApplicationEvent myEvent) { if (myEvent instanceof ApplicationEnvironmentPreparedEvent) { ConfigurableEnvironment myEnv= ((ApplicationEnvironmentPreparedEvent) myEve

我正在尝试测试一个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.我从构建中得到的错误是匹配器的使用无效,测试没有通过Jenkins构建,而是通过idea IDE 2.如何测试这些方法以将测试覆盖率保持在所需的水平上?这是一个问题,因为任何方法都没有正确使用。有关详细信息,请参阅Mockito指南。下面我的示例不使用任何,问题将消失

2-如果我推荐下面的测试用例,那么我将介绍2个分支

@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);
}

请注意,这不是可编译的代码,因为我不知道您的完整生产代码,所以请将其视为一种想法,将其应用于实际代码并进行相应修改。

非常感谢,我将尝试返回