如何识别应用程序在单元测试模式下运行?

时间:2017-06-10 15:12:37

标签: java junit

当应用程序在单元测试模式下运行时,我想在运行时停用某些函数。有没有办法识别它?

感谢您的任何提示!

2 个答案:

答案 0 :(得分:0)

感谢您的提示!

此代码适用于我的目的:

public static boolean junitIsActive() {     
    for (StackTraceElement s : Thread.currentThread().getStackTrace()) {
        if (s.getClassName().contains("org.junit.runners.model")) {
            return true;
        }
    }       
    return false;
}

答案 1 :(得分:0)

谢谢@vaio。

@Bean
boolean testMode() {
    for (StackTraceElement s : Thread.currentThread().getStackTrace()) {
        if (s.getClassName().contains("org.springframework.boot.test.context.SpringBootContextLoader")) {
            return true;
        }
    }
    return false;
}

在我的情况下(Spring Boot 批处理),上面的代码可以工作。

我只是想让一些 Job 不在测试模式下运行。

    @Bean
public Job reindexLeadsJob(JobCompletionNotificationListener listener, Step stepReindexFromMongoDB) {
    if (testMode) {
        return null;
    }
    return jobBuilderFactory.get("reindexLeadsJob")
            .incrementer(new RunIdIncrementer())
            .listener(listener)
            .flow(stepReindexFromMongoDB)
            .end()
            .build();
}

现在在测试模式下,我简单地在 JobConfig 中返回 null。还有其他更优雅的方式吗?