如何在 spring-boot-test 中跳过 ApplicationArguments 条件?

问题描述

我有一个项目,它会在启动时自动启动作业,以防没有给出特定的程序参数。

问题:在junit测试期间,我想手动调用方法,并阻止自动启动(因为我必须在作业运行之前为测试做一些更多的初始化)。

@Service
@Conditional(EmptyCondition.class)
public class MyDefaultJob implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) {
        //executed on startup
    }
}

class EmptyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context,AnnotatedTypeMetadata Metadata) {
        return CollectionUtils.isEmpty(
                context.getbeanfactory()
                    .getBean(ApplicationArguments.class)
                    .getNonoptionArgs());
    }
}

public static void main(String[] args) {
    SpringApplication.run(YpsilonImporterapp.class,args);
}

所以对于任何测试,上面的类都会自动执行:

@SpringBoottest
public class Test {
   @Autowired
   private MyDefaultJob job;

   @Test
   public void test() {
        //how to prevent automatic start?

        //do some mocking and initialization,then:
        job.run(null);
   }
}

我该如何预防?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)