0

我有一个引发异常的测试工作。我想测试是否捕获了异常,并且在对应期间之后,再次执行该作业。

按照春天的例子,我想不通。不推荐使用导入。我怎么能用 mockito 证明这个事实?

工作:

public class TestScheduler implements Runnable{
    @Override
    public void runScheduled(){
        LOGGER.info("Doing my tasks...");
        throw new RuntimeException("Testing purpose");
    }
}

配置:

<bean id="testScheduler" class="com.scheduler.TestScheduler"/>
    <bean id="testSchedulerTask" class="org.springframework.scheduling.concurrent.ScheduledExecutorTask">
        <property name="delay" value="10"/>
        <property name="period" value="60"/>
        <property name="runnable" ref="testScheduler"/>
    </bean>

提前致谢

4

1 回答 1

0

我写了一个简单的测试,如果有人有更好的主意,我会很高兴改进我的代码。

public class TestSchedulerIT extends SpringIntegrationTest {
    @Autowired
    TestScheduler testScheduler;

    @Mock
    TestScheduler.TestProperty testString;


    @Test
    public void testFixedRepeatedExecutionIsSetupAndFiresCorrectly() throws Exception {
        int period = 500;

        //Set test string
        when(testString.getProperty()).thenReturn("Testing");
        testScheduler.setTest(testString);

        ScheduledExecutorTask task = new ScheduledExecutorTask(testScheduler);
        task.setPeriod(period);
        task.setDelay(0);

        ScheduledExecutorFactoryBean factory = new ScheduledExecutorFactoryBean();
        factory.setScheduledExecutorTasks(new ScheduledExecutorTask[]{task});
        factory.afterPropertiesSet();
        pauseToLetTaskStart(period + 1000);
        verify(testString, atLeast(2)).getProperty(); //Verify that the job has been run at least 2 times regardless the exception
        factory.destroy();
    }

在 TestScheduler 我添加了这个属性:

public class TestProperty{
        private String property;

        TestProperty(String property){
            this.property = property;
        }

        public String getProperty() {
            return property;
        }
    }
于 2013-06-19T08:39:43.993 回答