Не удалось создать соединение JDB C для метода тестирования, когда я добавляю объект - PullRequest
1 голос
/ 03 февраля 2020

Доброе утро, у меня проблемы с тестом Junit.

У меня возникает эта ошибка при запуске теста Junit:

java .lang.RuntimeException: Не удалось создать набор данных для теста 'testRecupereEvenementsATraiter'. на com.github.dbunit.rules.DBUnitRule $ 1.evaluate (DBUnitRule. java: 97) на com.github.dbunit.rules.util.EntityManagerProvider $ 1.evaluate (EntityManagerProvider. java: 175) на org.junit .rules. : 78) в org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner. java: 57) в org.junit.runners.ParentRunner $ 3.run (ParentRunner. java: 290) в org.unun.unit. $ 1.schedule (ParentRunner. java: 71) в org.junit.runners.ParentRunner.runChildren (ParentRunner. java: 288) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner. java: 58) ) в org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner. java: 268) в org.junit.runners.ParentRunner.run (ParentRunner. java: 363) в org.mockito.internal.runners.DefaultInternalRunner $ 1.run (DefaultInternalRunner. java: 74) в org.mockito.internal.runners. DefaultInternalRunner.run (DefaultInternalRunner. java: 80) в org.mockito.internal.runners.StrictRunner.run (StrictRunner. java: 39) в org.mockito.junit.MockitoJUnitRunner.run (MockitoJUnitRun: 10: *. 163) в org.mockito.runners.MockitoJUnitRunner.run (MockitoJUnitRunner. java: 53) в org.junit.runner.JUnitCore.run (JUnitCore. java: 137) в com.intellij.junitnerT. (JUnit4IdeaTestRunner. java: 68) в com.intellij.rt.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs (IdeaTestRunner. java: 33) в com.intellij.rt.junit. : 230) at com.intellij.rt.junit.JUnitStarter.main (JUnitStarter. java: 58)

Причина: java .lang.RuntimeException: Не удалось создать соединение JDBC для метода testRecupereEvenementsATraiter, обеспечить соединение на тестовом уровне или через конфигурацию, см. документацию здесь: https://github.com/rmpestano/dbunit-rules#jdbc -connection на com.github.dbunit.rules.DBUnitRule $ 1.getConnectionFrom (DBUnitRule. java: 1 87) at com.github.dbunit.rules.DBUnitRule $ 1.evaluate (DBUnitRule. java: 92) ... еще 21

Эта проблема возникает, когда я добавляю эти классы в свой файл персистентности. :

<class>fr.gpmm.pbs.evenement.EtatEvenement</class>
<class>fr.gpmm.pbs.evenement.Evenement</class>

это моя единица персистентности:

  <persistence-unit>
    ...
  </persistence-unit>

<persistence-unit name="EvenementsDB" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>fr.gpmm.pbs.evenement.EtatEvenement</class>
    <class>fr.gpmm.pbs.evenement.Evenement</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
      <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:event;DB_CLOSE_DELAY=-1"/>
      <property name="javax.persistence.jdbc.user" value="sa"/>
      <property name="javax.persistence.jdbc.password" value=""/>
      <property name="avax.persistence.jdbc.format_sql" value="true"/>
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
      <property name="hibernate.show_sql" value="true"/>
    </properties>
  </persistence-unit>

это мой тестовый пример junit:


@RunWith(MockitoJUnitRunner.class)
public class EvenementsRepositoryTest {

    @Rule
    public EntityManagerProvider emProvider = EntityManagerProvider.instance("EvenementsDB");
    @Rule
    public DBUnitRule            dbUnitRule = DBUnitRule.instance(emProvider.connection());
    @Inject
    EvenementsRepository         repository;

    public EvenementsRepositoryTest() {
    }

    @Before
    public void setUp() {
        assertNotNull(emProvider);
        assertNotNull(dbUnitRule);
        if (repository == null) {
            EntityManager em = EntityManagerProvider.em();
            assertNotNull(em);
            EvenementsRepository fluxRepositoryImpl = new EvenementsRepositoryImpl(em);
            repository = fluxRepositoryImpl;
        }
    }

    /**
     * Test of recupereEvenementsATraiter method, of class EvenementsRepository.
     */
    @Test
    @DataSet(cleanBefore = true, value = "sampleEvenements.xml", transactional = true)
    public void testRecupereEvenementsATraiter() {
        assertNotNull(repository);
        Iterable<Evenement> result = repository.recupereEvenementsATraiter();
        assertNotNull(result);
        List<Evenement> results = IterableUtils.toList(result);
        assertNotNull(results);
        assertFalse(results.isEmpty());
        assertEquals(1, results.size());
        Evenement evenement = results.get(0);
        assertNotNull(evenement);
        assertNotNull(evenement.getId());
    }

}

это мои сущности:


@Entity
@Table(name = "xxx")
@NamedQueries(value = { //
        @NamedQuery(//
                name = "Evenement.recupereEvenementsATraiter", //
                query = "select e from Evenement e JOIN e.etats etat where etat.etat = 'A_TRAITER'"//
        )//
})
public class Evenement implements Serializable {

    public static final String        RECUPERE_EVENEMENTS_A_TRAITER = "Evenement.recupereEvenementsATraiter";

    // ID : identifiant technique auto incrémenté
    @Id
    @Column(name = "ID", nullable = false)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "rxevent_id_seq")
    @SequenceGenerator(name = "evenement_id_seq", sequenceName = "rxevent_id_seq", allocationSize = 1)
    private Long                      id                            = 0L;

    /**
     * version de l’entité représentant l’instance du job, initialement 0 puis incrémenté à chaque réexécution de
     * l’instance
     */
    @Version
    @Column(name = "VERSION", nullable = false)
    private Integer                   version;

    // HORODATAGE : valeur temporelle à laquelle l’évènement a été publié
    /**
     * timestamp de la première exécution de l’instance du job.
     */
    @Column(name = "HORODATAGE", nullable = true)
    private LocalDateTime             dateCreation;

    /**
     * timestamp de la dernière exécution de l’instance du job
     */
    @Column(name = "DT_DATE_MAJ", nullable = true)
    private LocalDateTime             dateModification;

    // CODE : code de l’évènement
    /**
     * nom du job.
     */
    @Enumerated(EnumType.STRING)
    @Column(name = "CODE", nullable = false)
    private TypeEvenement             typeEvenement;

    // FK_ENTITY : clé primaire de l’entité du document créé
    /**
     * clé primaire de l’entité cible, si applicable.
     */
    @Column(name = "FK_ENTITY", nullable = true)
    private String                    entiteCible;
    /**
     * TRAITE si l’instance du job se termine sans erreur, ERREUR sinon.
     */
    // @ElementCollection(fetch = FetchType.EAGER)
    @OneToMany(mappedBy = "evenement", fetch = FetchType.EAGER)
    private Collection<EtatEvenement> etatEvenements;

    @Transient
    private Map<Connecteur, JobState> etats                         = new HashMap<>();

    public Evenement() {
    }

    public Evenement(TypeEvenement typeEvenement, String entiteCible) {
        this.dateCreation = LocalDateTime.now();
        this.dateModification = LocalDateTime.now();
        this.version = 0;
        this.typeEvenement = typeEvenement;
        this.entiteCible = entiteCible;
        for (Connecteur Connecteur : typeEvenement.getConnecteurs()) {
            this.etats.put(Connecteur, JobState.A_TRAITER);
        }
    }

    public Evenement(Evenement evenement, Connecteur connecteur, JobState etat) {
        this(evenement.typeEvenement, evenement.entiteCible);
        this.dateCreation = evenement.dateCreation;
        this.etats = evenement.etats;
        etats.put(connecteur, etat);
    }

    @PostLoad
    private void postLoad() {
        for (EtatEvenement etatEvenement : etatEvenements) {
            etats.put(etatEvenement.getConnecteur(), etatEvenement.getJobState());
        }

    }

    @PrePersist
    @PreUpdate
    private void prePersist() {
        List<Connecteur> connecteurs = Arrays.asList(typeEvenement.getConnecteurs());
        for (EtatEvenement etatEvenement : etatEvenements) {
            connecteurs.remove(etatEvenement.getConnecteur());
            etatEvenement.setJobState(getEtat(etatEvenement.getConnecteur()));
        }
        for (Connecteur connecteur : connecteurs) {
            this.etatEvenements.add(new EtatEvenement(this, connecteur, getEtat(connecteur)));
        }
    }

}

@Entity
@Table(name = "XXX")
class EtatEvenement {

    @Id
    @ManyToOne
    @Column(name = "evenement", nullable = false)
    private Evenement  evenement;

    @Enumerated(EnumType.STRING)
    @Id
    @Column(name = "connecteur", nullable = false)
    private Connecteur connecteur;

    @Enumerated(EnumType.STRING)
    @Column(name = "etat", nullable = false)
    private JobState   etat;

    EtatEvenement(final Evenement evenement, final Connecteur Connecteur, final JobState etat) {
        this.evenement = evenement;
        this.connecteur = connecteur;
        this.etat = etat;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof EtatEvenement) {
            EtatEvenement etatEvenement = (EtatEvenement) obj;
            return this.evenement.getId() == etatEvenement.evenement.getId() && //
                    this.connecteur == etatEvenement.connecteur && //
                    this.etat == etatEvenement.etat;
        } else {
            return false;
        }
    }

}

Пожалуйста, помогите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...