使用黄瓜时,Spring Boot在嵌入式Cassandra之前加载,我该如何解决?

用户名

我在使用spring-cassandra-unit,spring-boot和spring-cucumber时遇到一些问题。下面的配置适用于单元测试,但是当我将spring-cucumber添加到混合中并尝试进行一些集成测试时,它似乎完全忽略了MyCustomOrderedTestExecutionListener并在cassandra之前加载spring boot,给了我一个“ NoHostFoundException”。

我真的可以就如何确保首先装入嵌入式cassandra提出建议。任何帮助是极大的赞赏。

以下设置:

@ActiveProfile("INTEGRATION_TEST")
@SpringBootTest
@EmbeddedCassandra(configuration = "cassandra.yaml")
@TestExecutionListeners(
  listeners = MyCustomOrderedTestExecutionListener.class,
  mergeMode = MERGE_WITH_DEFAULTS)
@CassandraDataSet(value = "cql/dataset1.cql", keyspace = "mykeyspace")
public class TestStepDef{

//omitted for brevity

} 

我的自定义订购的测试执行监听器:

public class MyCustomOrderedTestExecutionListener extends AbstractTestExecutionListener {

    @Override
    public void afterTestMethod(TestContext testContext) throws Exception {
       //omitted for brevity
    }

    @Override
    public int getOrder() {
        return  Ordered.HIGHEST_PRECEDENCE;
    }
}

黄瓜测试运行器:

@RunWith(Cucumber.class)
@CucumberOptions(features="resources/features", glue="resources/glue")
public class TestRunner {}

编辑:

看一下黄瓜弹簧的弹簧工厂,甚至在执行beforeTestClass之前就已经加载了应用上下文(beforeTestClass由notifyContextManagerAboutTestClassStarted执行):

 public void start() {
        if (this.stepClassWithSpringContext != null) {
            this.testContextManager = new CucumberTestContextManager(this.stepClassWithSpringContext);  
        } else if (this.beanFactory == null) {
            this.beanFactory = this.createFallbackContext();
        }

        this.notifyContextManagerAboutTestClassStarted();
        if (this.beanFactory == null || this.isNewContextCreated()) {
            this.beanFactory = this.testContextManager.getBeanFactory();
            Iterator var1 = this.stepClasses.iterator();

            while(var1.hasNext()) {
                Class<?> stepClass = (Class)var1.next();
                this.registerStepClassBeanDefinition(this.beanFactory, stepClass);
            }
        }

        GlueCodeContext.INSTANCE.start();
    }

更深入地讲,我们可以看到这里已加载应用上下文:

class CucumberTestContextManager extends TestContextManager {
    public CucumberTestContextManager(Class<?> testClass) {
        super(testClass);
        this.registerGlueCodeScope(this.getContext());
    }

     private ConfigurableApplicationContext getContext() {
    return (ConfigurableApplicationContext)this.getTestContext().getApplicationContext();
     }
...

}

关于如何解决这个问题的任何建议?

MP使用

目前,Cucumber仅调用TestContextManager.beforeClassTestContextManager.afterClass但是,这是在每种情况之前发生的,因此,覆盖TestExecutionListener.afterTestClass应该可以解决问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Spring Boot配置嵌入式ActiveMQ Broker URL

使用junit / Testng运行黄瓜时获取异常

用于Spring Boot的嵌入式Redis

如何使用Spring Boot和嵌入式Tomcat配置此属性?

如何使用嵌入式Tomcat 8和Spring Boot将子域转换为路径

使用Spring Boot的MongoDB嵌入式文档

使用Spring Boot进行黄瓜集成测试

maven-cargo2-plugin如何识别我的Spring Boot应用程序已在运行嵌入式Tomcat?

使用嵌入式模型的Spring Boot Hibernate ManyToMany Relation

Spring Boot嵌入式tomcat日志

Spring Boot数据嵌入式Cassandra

Spring Boot嵌入式Tomcat性能

如何解决:嵌入式二进制文件未使用相同证书签名

如何使用嵌入式Tomcat容器在Spring Boot中创建JNDI上下文

Spring Boot + GWT嵌入式配置

如何使用嵌入式tomcat会话集群设置Spring Boot应用程序?

如何使用Spring Boot应用程序在嵌入式Jetty中配置异步超时

将Spring Boot Weblfux与嵌入式Tomcat结合使用

如何使用gradle在Spring Boot的嵌入式tomcat中运行外部war文件?

如何使用Spring Boot覆盖嵌入式Tomcat的websocket.textBufferSize属性?

使用Java / IntelliJ运行黄瓜时出错

在使用StreamBuilder从Firebase加载数据之前,Flutter会显示红色错误屏幕,该如何解决?

使用“ --retry”运行黄瓜时出现“无效选项”错误

如何关闭Spring Boot嵌入式服务器

如何使用嵌入式Cassandra和Rexster设置Titan

如何将hawt.io与Spring Boot和嵌入式Jetty结合使用

在Spring Boot中使用多个嵌入式数据存储

我该如何解决这个 Spring UnsatisfiedDependencyException

我该如何解决这个错误?; 错误:此处不允许在“{”标记之前使用函数定义