Auf Thema antworten

Hi Leute,wir lernen im Unterricht derzeit Spring unter anderem auch Spring-Data.

Natürlich möchte ich meinen Code auch testen.

Im speziellen geht es hier um die Überprüfung ob die Repositorys richtig funktionieren.

Hier mal der Code eines Repository:


[code=Java]

package at.fdisk.domain;


import java.util.Date;


import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.ManyToOne;

import javax.persistence.Table;

import javax.persistence.Temporal;

import javax.persistence.TemporalType;

import javax.persistence.Transient;

import javax.validation.constraints.NotNull;

import javax.validation.constraints.Size;


import at.fdisk.util.EnsureService;


@Entity

@Table(name = "ausbildung")

public class Ausbildung extends BasePersistable {


    private static final long serialVersionUID = 4601413807692718572L;

   

    @Size(max = 30)

    @NotNull

    @Column(name = "bezeichnung", nullable = false, length = 30)

    private String bezeichnung;

   

    @Size(max = 3)

    @NotNull

    @Column(name = "kurzbezeichnung", nullable = false, length = 3)

    private String kurzBezeichnung;

   

    @ManyToOne

    @Transient

    private Feuerwehr ort;

   

    @Temporal(TemporalType.DATE)

    @NotNull

    @Column(name = "startdatum", nullable = false)

    private Date startdatum;

   

    @Temporal(TemporalType.DATE)

    @NotNull

    @Column(name = "endatum", nullable = false)

    private Date enddatum;


    public Ausbildung(String bezeichnung, String kurz_bezeichnung,

            Feuerwehr ort, Date startdatum, Date enddatum) {

        super();

        EnsureService.notEmpty("bezeichnung", bezeichnung);

        EnsureService.notEmpty("kurz_bezeichnung", kurz_bezeichnung);

        EnsureService.notNull("ort", ort);

        EnsureService.notNull("startdatum", startdatum);

        EnsureService.notNull("enddatum", enddatum);

        this.bezeichnung = bezeichnung;

        this.kurzBezeichnung = kurz_bezeichnung;

        this.ort = ort;

        this.startdatum = startdatum;

        this.enddatum = enddatum;

    }


    public Ausbildung() {

        // required for JPA

    }


    public String getBezeichnung() {

        return bezeichnung;

    }


    public void setBezeichnung(String bezeichnung) {

        this.bezeichnung = bezeichnung;

    }


    public String getKurz_bezeichnung() {

        return kurzBezeichnung;

    }


    public void setKurz_bezeichnung(String kurz_bezeichnung) {

        this.kurzBezeichnung = kurz_bezeichnung;

    }


    public Feuerwehr getOrt() {

        return ort;

    }


    public void setOrt(Feuerwehr ort) {

        this.ort = ort;

    }


    public Date getStartdatum() {

        return startdatum;

    }


    public void setStartdatum(Date startdatum) {

        this.startdatum = startdatum;

    }


    public Date getEnddatum() {

        return enddatum;

    }


    public void setEnddatum(Date enddatum) {

        this.enddatum = enddatum;

    }


   

}

[/code]


[code=Java]

package at.fdisk.repository;


import java.util.Date;

import java.util.List;


import at.fdisk.domain.Ausbildung;


public interface AusbildungRepositoryCustom {

    List<Ausbildung> findByBezeichnung(String bezeichnung);

    List<Ausbildung> findByKurzbezeichnung(String kurzbezeichnung);

    List<Ausbildung> findByStartdatum(Date startdatum);

    List<Ausbildung> findByEnddatum(Date enddatum);

}

[/code]


[code=Java]

package at.fdisk.repository;


import java.util.List;

import org.springframework.data.repository.CrudRepository;


import at.fdisk.domain.Ausbildung;


public interface AusbildungRepository extends AusbildungRepositoryCustom,

        CrudRepository<Ausbildung, Long> {


    List<Ausbildung> findAll();


    Ausbildung findById(Long id);

}

[/code]


[code=Java]

package at.fdisk.repository.impl;


import java.util.Date;

import java.util.List;


import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;


import com.mysema.query.jpa.impl.JPAQuery;


import at.fdisk.domain.Ausbildung;

import at.fdisk.domain.QAusbildung;

import at.fdisk.repository.AusbildungRepositoryCustom;


public class AusbildungRepositoryImpl implements AusbildungRepositoryCustom {


    @PersistenceContext

    EntityManager entityManager;


    @Override

    public List<Ausbildung> findByBezeichnung(String bezeichnung) {

        JPAQuery query = new JPAQuery(entityManager);

        QAusbildung ausbildung = QAusbildung.ausbildung;

        query.from(ausbildung).where(ausbildung.bezeichnung.eq(bezeichnung));

        return query.list(ausbildung);

    }


    @Override

    public List<Ausbildung> findByKurzbezeichnung(String kurzbezeichnung) {

        JPAQuery query = new JPAQuery(entityManager);

        QAusbildung ausbildung = QAusbildung.ausbildung;

        query.from(ausbildung).where(

                ausbildung.kurzBezeichnung.eq(kurzbezeichnung));

        return query.list(ausbildung);

    }


    @Override

    public List<Ausbildung> findByStartdatum(Date startdatum) {

        JPAQuery query = new JPAQuery(entityManager);

        QAusbildung ausbildung = QAusbildung.ausbildung;

        query.from(ausbildung).where(ausbildung.startdatum.eq(startdatum))

                .orderBy(ausbildung.bezeichnung.asc());

        return null;

    }


    @Override

    public List<Ausbildung> findByEnddatum(Date enddatum) {

        JPAQuery query = new JPAQuery(entityManager);

        QAusbildung ausbildung = QAusbildung.ausbildung;

        query.from(ausbildung).where(ausbildung.enddatum.eq(enddatum))

                .orderBy(ausbildung.bezeichnung.asc());

        return null;

    }


}

[/code]


Nun zu meinem Problem:

Ich teste ob die Funktion findById, welche ja von Spring automatisch implementiert wird, auch wirklich funktioniert. Das Problem dabei ist: Jedes mal wenn ich den Test durchlaufen lasse, werden die Datensätze in eine H2 Datenbank geladen welche nur den Testzwecken dient. Durch ein .deleteAll() lösche ich jedesmal vor dem Test alles aus dieser DB heraus. Doch irgendwie funktionier dies nicht und es bleibt jedesmal nur die ID gespeichert (Habe dies durch Debugging schon herausgefunden). Woran könnte das liegen ?


Hier noch der Code von meinem Test:


[code=Java]

package at.fdisk.repository;


import java.util.Date;

import java.util.List;


import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;


import org.junit.Before;

import org.junit.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import org.springframework.context.support.AbstractApplicationContext;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;

import org.springframework.util.Assert;


import at.fdisk.domain.Ausbildung;

import at.fdisk.domain.Feuerwehr;

import at.fdisk.repository.AusbildungRepository;

import at.fdisk.repository.RepositoryTestConfiguration;


@ContextConfiguration(classes = RepositoryTestConfiguration.class)

public class AusbildungsRepositoryTest extends AbstractJUnit4SpringContextTests {


    @PersistenceContext

    EntityManager entityManager;


    @Autowired

    AusbildungRepository ausbildungRepository;


    @Before

    public void setup() {

        ausbildungRepository.deleteAll();

    }


    @Test

    public void testFindAll() {

        ausbildungRepository.save(new Ausbildung("TEST1", "T1",

                new Feuerwehr(), new Date(), new Date()));

        ausbildungRepository.save(new Ausbildung("TEST2", "T2",

                new Feuerwehr(), new Date(), new Date()));

        ausbildungRepository.save(new Ausbildung("TEST3", "T3",

                new Feuerwehr(), new Date(), new Date()));

        List<Ausbildung> ausbildung = ausbildungRepository.findAll();


        Assert.notNull(ausbildung);

        Assert.isTrue(ausbildung.size() == 3);

    }


    @Test

    public void testFindById() {

        AbstractApplicationContext context = new AnnotationConfigApplicationContext(

                RepositoryTestConfiguration.class);

        AusbildungRepository repository = context

                .getBean(AusbildungRepository.class);

        repository.save(new Ausbildung("TEST1", "T1",

                new Feuerwehr(), new Date(), new Date()));

        repository.save(new Ausbildung("TEST2", "T2",

                new Feuerwehr(), new Date(), new Date()));

        repository.save(new Ausbildung("TEST3", "T3",

                new Feuerwehr(), new Date(), new Date()));


        Ausbildung ausbildung = repository.findById((long) 1);

        Assert.notNull(ausbildung);

        Assert.isTrue(ausbildung.getBezeichnung().equals("TEST1"));


        context.close();

    }

}

[/code]



Oben