de.thkwalter.et.schlupfbezifferung.SchlupfbezifferungControllerTest.java Source code

Java tutorial

Introduction

Here is the source code for de.thkwalter.et.schlupfbezifferung.SchlupfbezifferungControllerTest.java

Source

/**
 *  Copyright 2014 Th. K. Walter, Nrnberg.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package de.thkwalter.et.schlupfbezifferung;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.apache.commons.math3.geometry.euclidean.twod.Vector2D;
import org.junit.Before;
import org.junit.Test;

import de.thkwalter.et.ortskurve.Ortskurve;

/**
 * Diese Klasse enthlt Tests fr die Klasse {@link SchlupfbezifferungController}.
 * 
 * @author Th. K. Walter
 */
public class SchlupfbezifferungControllerTest {
    /**
     * Der Prfling der Klasse der Klasse {@link SchlupfbezifferungController}.
     */
    private SchlupfbezifferungController schlupfbezifferungController;

    // ---------------------------------------------------------------------------------------------------------------------

    /**
     * Das in den Tests verwendete Datenmodell der Schlupfbezifferungsbestimmung
     */
    private SchlupfbezifferungModell testSchlupfbezifferungModell;

    // =====================================================================================================================
    // =====================================================================================================================

    /**
     * Diese Methode initialisiert die Tests.
     * 
     * @throws java.lang.Exception
     */
    @Before
    public void setUp() throws Exception {
        // Der Prfling wird erzeugt.
        this.schlupfbezifferungController = new SchlupfbezifferungController();

        // Die in den Tests verwendete Ortskurve wird erzeugt und initialisiert.
        Ortskurve testOrtskurve = new Ortskurve(new Vector2D(6.0768, 1.8413), 4.4975);

        // Die in den Tests verwendeten Betriebspunkte, die zur Bestimmung der Schlupfbezifferung verwendet werden, werden
        // erzeugt.
        Betriebspunkt[] testBetriebspunkte = new Betriebspunkt[3];
        testBetriebspunkte[0] = new Betriebspunkt(1.8843, 0.22026);
        testBetriebspunkte[1] = new Betriebspunkt(1.6135, 1.2989);
        testBetriebspunkte[2] = new Betriebspunkt(1.6639, 2.7199);

        // Das in den Tests verwendete Datenmodell der Schlupfbezifferungsbestimmung wird erzeugt und initialisiert.
        this.testSchlupfbezifferungModell = new SchlupfbezifferungModell();
        this.testSchlupfbezifferungModell.setOrtskurve(testOrtskurve);
        this.testSchlupfbezifferungModell.setBetriebspunkte(testBetriebspunkte);

        // Das in den Tests verwendete Datenmodell der Schlupfbezifferungsbestimmung wird im Controller der 
        // Schlupfbezifferungsbestimmung gespeichert.
        Field feldSchlupfbezifferungModell = SchlupfbezifferungController.class
                .getDeclaredField("schlupfbezifferungModell");
        feldSchlupfbezifferungModell.setAccessible(true);
        feldSchlupfbezifferungModell.set(this.schlupfbezifferungController, this.testSchlupfbezifferungModell);
    }

    // =====================================================================================================================
    // =====================================================================================================================

    /**
     * Test des Konstruktors {@link SchlupfbezifferungController#SchlupfbezifferungController()}.
     * @throws SecurityException 
     * @throws NoSuchFieldException 
     * @throws IllegalAccessException 
     * @throws IllegalArgumentException 
     */
    @Test
    public void testSchlupfbezifferungController()
            throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        // Es wird berprft, ob der Prfling erzeugt worden ist.
        assertNotNull(this.schlupfbezifferungController);

        // Es wird berprft, ob der Lsungsalgorithmus zur Bestimmung des Steigungswinkels der Schlupfgeraden erzeugt 
        // worden ist.
        Field feldBisectionSolver = SchlupfbezifferungController.class.getDeclaredField("bisectionSolver");
        feldBisectionSolver.setAccessible(true);
        assertNotNull(feldBisectionSolver.get(this.schlupfbezifferungController));
    }

    // =====================================================================================================================
    // =====================================================================================================================

    /**
     * Test der Methode {@link SchlupfbezifferungController#inversionszentrumBerechnen}.
     * 
     * @throws SecurityException 
     * @throws NoSuchMethodException 
     * @throws InvocationTargetException 
     * @throws IllegalArgumentException 
     * @throws IllegalAccessException 
     */
    @Test
    public void testInversionszentrumBerechnen() throws NoSuchMethodException, SecurityException,
            IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        // Die zu testende Methode wird aufgerufen.
        Method methode = SchlupfbezifferungController.class.getDeclaredMethod("inversionszentrumBerechnen",
                (Class<?>[]) null);
        methode.setAccessible(true);
        Vector2D inversionszentrum = (Vector2D) methode.invoke(this.schlupfbezifferungController, (Object[]) null);

        // Es wird berprft, ob das Inversionszentrum korrekt berechnet worden ist.
        assertEquals(9.257, inversionszentrum.getX(), 9.257 / 1000.0);
        assertEquals(-1.339, inversionszentrum.getY(), 1.339 / 1000.0);
    }

    // =====================================================================================================================
    // =====================================================================================================================

    /**
     * Test der Methode {@link SchlupfbezifferungController#schlupfbezifferungBestimmenIntern()}.
     * 
     * @throws SecurityException 
     * @throws NoSuchMethodException 
     * @throws InvocationTargetException 
     * @throws IllegalArgumentException 
     * @throws IllegalAccessException 
     */
    @Test
    public void testSchlupfbezifferungBestimmenIntern() throws NoSuchMethodException, SecurityException,
            IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        // Die zu testende Methode wird aufgerufen.
        Method methode = SchlupfbezifferungController.class.getDeclaredMethod("schlupfbezifferungBestimmenIntern",
                (Class<?>[]) null);
        methode.setAccessible(true);
        methode.invoke(this.schlupfbezifferungController, (Object[]) null);

        // Es wird berprft, ob das berechnete Inversionszentrum (in A) korrekt berechnet und im Datenmodell der
        // Schlupfbezifferungsbestimmung gespeichert worden ist.
        assertEquals(9.257, this.testSchlupfbezifferungModell.getInversionszentrum().getX(), 9.257 / 1000.0);
        assertEquals(-1.339, this.testSchlupfbezifferungModell.getInversionszentrum().getY(), 1.339 / 1000.0);

        // Es wird berprft, ob der Drehpunkt der Schlupfgeraden (inA) korrekt berechnet und im Datenmodell der
        // Schlupfbezifferungsbestimmung gespeichert worden ist.
        assertEquals(6.077, this.testSchlupfbezifferungModell.getDrehpunktSchlupfgerade().getX(), 6.077 / 1000.0);
        assertEquals(-2.656, this.testSchlupfbezifferungModell.getDrehpunktSchlupfgerade().getY(), 2.656 / 1000.0);
    }

    // =====================================================================================================================
    // =====================================================================================================================

    /**
     * Test der Methode {@link SchlupfbezifferungController#drehpunktSchlupfgeradeBerechnen()}.
     * 
     * @throws SecurityException 
     * @throws NoSuchMethodException 
     * @throws InvocationTargetException 
     * @throws IllegalArgumentException 
     * @throws IllegalAccessException 
     */
    @Test
    public void testDrehpunktSchlupfgeradeBerechnen() throws NoSuchMethodException, SecurityException,
            IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        // Die zu testende Methode wird aufgerufen.
        Method methode = SchlupfbezifferungController.class.getDeclaredMethod("drehpunktSchlupfgeradeBerechnen",
                (Class<?>[]) null);
        methode.setAccessible(true);
        Vector2D drehpunktSchlupfgerade = (Vector2D) methode.invoke(this.schlupfbezifferungController,
                (Object[]) null);

        // Es wird berprft, ob das Inversionszentrum korrekt berechnet worden ist.
        assertEquals(6.077, drehpunktSchlupfgerade.getX(), 6.077 / 1000.0);
        assertEquals(-2.656, drehpunktSchlupfgerade.getY(), 2.656 / 1000.0);
    }

    // =====================================================================================================================
    // =====================================================================================================================

    /**
     * Test der Methode {@link SchlupfbezifferungController#steigungenBerechnen()}.
     * 
     * @throws SecurityException 
     * @throws NoSuchMethodException 
     * @throws InvocationTargetException 
     * @throws IllegalArgumentException 
     * @throws IllegalAccessException 
     */
    @Test
    public void testSteigungenBerechnen() throws NoSuchMethodException, SecurityException, IllegalAccessException,
            IllegalArgumentException, InvocationTargetException {
        //   // Das Inversionszentrum (in A) wird berechnet und im Datenmodell der Schlupfbezifferungsbestimmung gespeichert.
        //   Method methodeInversionszentrumBerechnen = 
        //      SchlupfbezifferungController.class.getDeclaredMethod("inversionszentrumBerechnen", (Class<?>[]) null);
        //   methodeInversionszentrumBerechnen.setAccessible(true);
        //   Vector2D inversionszentrum = 
        //      (Vector2D) methodeInversionszentrumBerechnen.invoke(this.schlupfbezifferungController, (Object[]) null);
        //   this.testSchlupfbezifferungModell.setInversionszentrum(inversionszentrum);
        //   
        //   // Die zu testende Methode wird aufgerufen.
        //   Method methode = SchlupfbezifferungController.class.getDeclaredMethod("steigungenBerechnen", (Class<?>[]) null);
        //   methode.setAccessible(true);
        //   double[] steigungen = (double[]) methode.invoke(this.schlupfbezifferungController, (Object[]) null);
        //   
        //   // Es wird berprft, ob die Steigungen der Strahlen vom Inversionszentrum zu den Betriebspunkten korrekt 
        //   // berechnet worden sind
        //   assertEquals(3, steigungen.length);
        //   assertEquals(-0.2115, steigungen[0], 0.2115 / 1000.0);
        //   assertEquals(-0.3451, steigungen[1], 0.3451 / 1000.0);
        //   assertEquals(-0.5345, steigungen[2], 0.5345 / 1000.0);
    }

    // =====================================================================================================================
    // =====================================================================================================================

    /**
     * Test der Methode {@link SchlupfbezifferungController#steigungenBerechnen()} fr den Fall, dass die Ausnahme 
     * geworfen wird
     * 
     * @throws SecurityException 
     * @throws NoSuchMethodException 
     */
    @Test
    public void testSteigungenBerechnenMitException() throws NoSuchMethodException, SecurityException,
            IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        //   // Das Inversionszentrum (in A) wird berechnet und im Datenmodell der Schlupfbezifferungsbestimmung gespeichert.
        //   Method methodeInversionszentrumBerechnen = 
        //      SchlupfbezifferungController.class.getDeclaredMethod("inversionszentrumBerechnen", (Class<?>[]) null);
        //   methodeInversionszentrumBerechnen.setAccessible(true);
        //   Vector2D inversionszentrum = 
        //      (Vector2D) methodeInversionszentrumBerechnen.invoke(this.schlupfbezifferungController, (Object[]) null);
        //   this.testSchlupfbezifferungModell.setInversionszentrum(inversionszentrum);
        //   
        //   // Ein in diesem Test verwendeter Betriebspunkt wird erzeugt und im Datenmodell der Schlupfbezifferungsbestimmung
        //   // gespeichert.
        //   Betriebspunkt testBetriebspunkt = new Betriebspunkt(inversionszentrum.getX(), 1.2989);
        //   this.testSchlupfbezifferungModell.getBetriebspunkte()[1] = testBetriebspunkt;
        //   
        //   // Die zu testende Methode wird aufgerufen.
        //   try
        //      {
        //      Method methode = SchlupfbezifferungController.class.getDeclaredMethod("steigungenBerechnen", (Class<?>[]) null);
        //      methode.setAccessible(true);
        //      methode.invoke(this.schlupfbezifferungController, (Object[]) null);
        //      
        //      // Falls keine Ausnahme geworfen worden ist, liegt ein Fehler vor.
        //      Assert.fail("Eine Ausnahme htte geworfen werden mssen!");
        //      }
        //   catch (Exception e)
        //      {
        //      System.out.println(e.getCause().getMessage());
        //      
        //      // Anhand des Fehlertextes wird berprft, ob die korrekte Ausnahme geworfen worden ist.
        //      assertTrue(e.getCause().getMessage().contains("liegt ber dem Inversionszentrum"));
        //      }
    }
}