Доброе утро, у меня проблемы с тестом 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;
}
}
}
Пожалуйста, помогите!