2017-05-24 76 views
0

我有arquillian测试运行在嵌入式野蝇上。即使所有迁移脚本,Integrator类(其中设置了FlyWay)和所有flyway软件包(来自POM文件)都包含在.war文件中的shrinkwrap文件中(该文件部署在嵌入式wildfly中),因此不会进行迁移。arquillian和flyway:不执行迁移

这是否有任何理由?这主要是不工作还是我错过了什么?

我想要达到的目标是由arquillian运行的自动化测试将使用相同的迁移脚本在内存数据库中设置与生产数据库相同的方案。

编辑:作为ytg问下面,我添加了Integrator类;然而,这个代码并没有在arquillian测试中输入;如果我在集成方法的顶部设置断点,它将永远不会被击中。为什么?

import org.flywaydb.core.Flyway; 
import org.flywaydb.core.api.MigrationInfo; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.engine.spi.SessionFactoryImplementor; 
import org.hibernate.integrator.spi.Integrator; 
import org.hibernate.metamodel.source.MetadataImplementor; 
import org.hibernate.service.spi.SessionFactoryServiceRegistry; 

public class FlywayIntegrator implements Integrator 
{ 
    @Override 
    public void integrate(final Configuration configuration, 
          final SessionFactoryImplementor sessionFactoryImplementor, 
          final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) 
    { 

     System.out.println("Starting Flyway database migrations"); 

     Flyway flywayEvending = new Flyway(); 

     // enable this to migrate from the state currently on useqrnow.com 
     flywayEvending.setBaselineVersionAsString("0"); 
     flywayEvending.setBaselineOnMigrate(true); 
     flywayEvending.setDataSource(...) 

     flywayEvending.setLocations(...); 
     for (MigrationInfo i : flywayEvending.info().all()) 
     { 
      System.out.println("migrate task: " + i.getVersion() + " : " + i.getDescription() + " from file: " + i.getScript()); 
     } 
     flywayEvending.migrate(); 
    } 

    @Override 
    public void integrate(final MetadataImplementor metadataImplementor, final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) 
    { 
     // do nothing 
    } 

    @Override 
    public void disintegrate(final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) 
    { 
     // do nothing 
    } 
} 
+0

请包括您的Integrator类的设置代码。 – ytg

+0

好吧,即使未输入此代码,我也会添加它。如果我设置了一个断点,它在运行arquillian测试期间不会被命中...... – badera

+0

如果您对应用程序容器(如WildFly)进行测试,则应该在调试模式下运行它并附加远程调试器,否则您只能为JVM提供调试它运行你的测试(这不是一回事)。 –

回答

0

经过很长时间,我重新尝试解决这个问题。这很简单:我错过了添加文件META-INF/services/org.hibernate.integrator.spi.Integrator,我们必须在其中存储积分器类。我需要将这个文件添加到.war中,该文件由ShrinkWrap创建。