edu.htwm.vsp.phone.services.XmlMappingTest.java Source code

Java tutorial

Introduction

Here is the source code for edu.htwm.vsp.phone.services.XmlMappingTest.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.htwm.vsp.phone.services;

import edu.htwm.vsp.phone.service.PhoneNumber;
import edu.htwm.vsp.phone.service.PhoneUser;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Collection;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import org.apache.commons.lang.RandomStringUtils;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.sameInstance;
import org.junit.Before;
import org.junit.Test;

/**
 *
 * @author adopleb
 * 
 * Testet, ob die JAXB-Annotationen korrekt gesetzt sind und das das XML-Mapping
 * fehlerfrei funktioniert
 */
public class XmlMappingTest extends BaseTest {
    private final File testfileLoad = new File("src/test/resources/anne.xml");
    private final File testfileSave = new File("src/test/resources/random.xml");
    private Marshaller marshaller;
    private Unmarshaller unmarshaller;

    @Before
    public void prepareXmlMarshalling() throws JAXBException {

        /*
         * Code Duplizierung vermeiden
         * (DRY -> http://de.wikipedia.org/wiki/Don%E2%80%99t_repeat_yourself) und
         * aufwndige, immer wieder verwendete Objekte nur einmal erzeugen
         *
         */
        JAXBContext context = JAXBContext.newInstance(PhoneUser.class, PhoneNumber.class);

        marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        unmarshaller = context.createUnmarshaller();
    }

    /**
     * Testet ob eine XML-Datei korrekt angelegt wird
     */
    @Test
    public void createValidXmlFile() throws IOException, JAXBException {

        // Lsche Datei falls schon vorhanden
        if (testfileSave.exists()) {
            testfileSave.delete();
        }

        /*
         * Erzeugt einen Nutzer mit einem zuflligen Namen und einer zuflligen Telefonnummer.
         */
        PhoneUser newUser = createRandomUser(phoneService);
        String phoneNumberCaption = RandomStringUtils.randomAlphanumeric(10);
        String phoneNumber = RandomStringUtils.randomAlphanumeric(8);
        PhoneNumber newNumber = new PhoneNumber(phoneNumberCaption, phoneNumber);
        newUser.getPhoneNumbers().add(newNumber);

        // XML-Datei schreiben
        marshaller.marshal(newUser, new FileWriter(testfileSave));
        // Teste ob Datei existiert und lesbar ist
        assertThat(testfileSave.exists(), is(true));
        assertThat(testfileSave.isFile(), is(true));

        // deserialize
        PhoneUser deserializedUser = (PhoneUser) unmarshaller.unmarshal(testfileSave);

        // check deserialization creates new object
        assertThat(deserializedUser, is(not(sameInstance(newUser))));
        assertThat(deserializedUser, is(newUser));
    }

    /**
     * liest aus XML-Datei *
     */
    @Test
    public void loadFromXmlFile() throws IOException, JAXBException {

        PhoneUser loadedUser = (PhoneUser) unmarshaller.unmarshal(new FileReader(testfileLoad));

        Collection phoneNumbers = loadedUser.getPhoneNumbers();

        // prft, ob die beiden Telefonnummern enthalten sind
        assertThat(phoneNumbers.size(), is(2));
        // prft, ob der Name erkannt wurde
        assertThat(loadedUser.getName(), is("anne"));
        // prft, dass die ID stimmt
        assertThat(loadedUser.getId(), is(1));
    }
}