Methoden JUnit 4 - Test

P

PoroBobRoss

Neues Mitglied
Hallo,
ich muss ein Programm schreiben, dass mir mit der Übergabe eines Calendar-Objekt an die Methode
berechneBruttoPreis(Calendar cal):
    public double berechneBruttoPreis (Calendar cal) {
        //Compare Calendar
        //Jul
        Calendar jul = new GregorianCalendar(2020, 6, 1);
        //Dez
        Calendar dez = new GregorianCalendar(2021, 0, 1);
       
        //Nicht Ermaessigt
        if (ermaessigterSteuersatz == false) {
            // innerhalb Zeitraum
            if (cal.after(jul) && cal.before(dez)) {
                return Math.round((nettoPreis * 1.17) * 100) / 100.0;
            }
            // außerhalb Zeitraum
            else {
                return Math.round((nettoPreis * 1.19) * 100) / 100.0;
            }

        }
       
        //Ermaessigt
        else {
            // innerhalb Zeitraum
            if (cal.after(jul) && cal.before(dez)) {
                return Math.round((nettoPreis * 1.05) * 100) / 100.0;
            }
            // außerhalb Zeitraum
            else {
                return Math.round((nettoPreis * 1.07) * 100) / 100.0;
            }

        }

    }
übergibt und so den Preis eines Produktes mit den jeweiligen MwSt zu berechnen (je nach Datum eben 19/16% bzw 7/5%).
Beim Testen dieser Methode tritt aber nun folgendes Problem auf:
JUnit4 Test Klasse:
import static org.junit.Assert.*;

import java.util.Calendar;
import java.util.GregorianCalendar;

import org.junit.Before;
import org.junit.Test;

public class ProduktTest {
    private Produkt prod1;

    private Calendar march;
   
        @Before
        public void setUp() {
            //arrange
            //Produkte
            prod1 = new Produkt("Katzenbrunnen", false, 25.20);
            //Calendar
            march = new GregorianCalendar(2020, 2, 18, 13, 0);
        }
       
        @Test
        public void keineReduzierteSteuer() {
            //act
            double erg1 = prod1.berechneBruttoPreis(march);
            System.out.println(erg1);
            //assert
            assertEquals(29.99, erg1);
           
       
    }

}
Der Test schlägt fehl. Das sysout hab ich mal zur Überprüfung hingeschrieben, damit ich mir auch selbst sicher bin, dass das das richtige Ergebnis ist.
Ich weiß nicht ganz genau warum der Test fehlschlägt. Es könnte sich ja mal einer anschauen (vlt Stimmt ja auch was an der Preisberechnung nicht so ganz) :)
Vielen Dank im voraus, egal ob wir zu einer Lösung kommen oder nicht.

Edit:
Mit "NotSame" funktioniert der Test zwar, aber das irritiert nicht etwas, da dort ja mit == verglichen wird.
Die Ergebnisse werden auch auf 2 Nachkomma gerundet. Hab auch schonmal versucht das ganze zu debuggen, jedoch finde ich dort auch nicht den Fehler.

Grüße Julian
 
Zuletzt bearbeitet:
P

PinkMuffin

Aktives Mitglied
Was kommt denn als Meldung. Normal steht da "excpeted... but was ..."
Hat es einen Grund, dass du bei deinem Testdatum 5 Parameter mitgibst?
Eigentlich sollte Jahr, Monat und Tag ausreichen
 
P

PoroBobRoss

Neues Mitglied
Nein, es gibt da keinen Grund für. Hatte nur gedacht das es nicht so ganz "dumm" aussähe wenn ich noch die Uhrzeit mitnehme.
Also wenn du den FailureTrace meinst dann:
java.lang.AssertionError: Use assertEquals(expected, actual, delta) to compare floating-point numbers
Da hab ich wohl vergessen draufzuschauen.
Delta ist ja normal die Differenz? Für was wird die denn hier benötigt? (Ich hoffe ich liege nicht falsch ^^)

Ja hab es grad in der API gesehen. Ahje, manchmal hat man das Brett vor dem Kopf :)
 
P

PinkMuffin

Aktives Mitglied
Delta hab ich zumindest gebraucht, weil die normale Methode deprecated ist. Da es genau übereinstimmen soll, kannst du an der Stelle 0 einsetzen. Wenn ich die Fehlermeldung richtig verstehe, ist das auch das Problem.
 
L

LimDul

Top Contributor
Das Problem ist, das Floating Point Operationen in der Regel nicht exakt sind. Wenn man - als Beispiel - 100 mal 0.01 aufaddiert, hat man nicht 1 sondern vermutlich 0.99999999999999999999999999999999999999999999 oder 1.0000000000000000000000000000000001 in Art. Dementsprechend sollte man bei Vergleichen auch immer ein Delta mit angeben, inwieweit die gleich sind. Gut hier rundest du, daher geht ein Delta von 0 gut, aber da läuft man halt leicht in Probleme rein.
 
kneitzel

kneitzel

Top Contributor
Nur als kleine Anmerkung und zur besseren Einordnung:
So viele 0er bzw. 9er braucht man nicht einmal. Das sind ja über 30 Stück. Im Dezimalsystem ... Mit wie viel bit willst Du die Mantisse denn speichern? :)

Aber das kann man ja schnell austesten:
Java:
        double summe = 0.0;
        double inc = 0.01;
        for (int i = 0; i<100; i++) summe += inc;
        System.out.println(summe);

1.0000000000000007

Ist immer noch eine gute Genauigkeit. Aber wichtig ist dann halt, dass man sich Gedanken macht über die benötigte Genauigkeit. Und dann braucht man einen Datentyp mit höherer Genauigkeit.
Und dann muss man bei Berechnungen ggf regelmäßig "runden", so dass Abweichungen sich nicht aufaddieren!
 
H

httpdigest

Top Contributor
if (ermaessigterSteuersatz == false) {
// innerhalb Zeitraum
if (cal.after(jul) && cal.before(dez)) {
return Math.round((nettoPreis * 1.17) * 100) / 100.0;
}
Kleiner Hinweis noch: Der durch Corona gesunkene Umsatzsteuersatz betrug 16%, nicht 17%.
Und: Wenn du jegliche Rundungsfehler vermeiden willst, rechne einfach immer mit Ganzzahlen in der kleinsten Einheit, die in deinem Anwendungsbereich Sinn macht, also zum Beispiel 1 = 1 Eurocent. €19,95 wäre dann also einfach der Integer 1995.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Junit test Java Basics - Anfänger-Themen 12
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
W Problem bei JUnit Test Aufgabe Java Basics - Anfänger-Themen 15
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
S Junit Test Java Basics - Anfänger-Themen 2
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
T JUnit test failed Java Basics - Anfänger-Themen 3
R JUnit Test mit einer Dateistruktur als Testparameter Java Basics - Anfänger-Themen 3
shiroX OOP Array kleinste Zahl mit jUnit test Java Basics - Anfänger-Themen 3
S Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
R JUnit Test mit mehrfach ausgeführt Java Basics - Anfänger-Themen 6
B JUnit - Mini-Test Java Basics - Anfänger-Themen 9
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
Y Junit Test - Testwert ändert sich Java Basics - Anfänger-Themen 12
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
T JUNit Test IOException Java Basics - Anfänger-Themen 5
Spin JUNIT Test Case - Problem bei testen Java Basics - Anfänger-Themen 2
T brauche HILFE beim Junit test:eek: Java Basics - Anfänger-Themen 11
timbeau JUnit Test Dauer speichern/loggen Java Basics - Anfänger-Themen 16
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
J JUnit Test Java Basics - Anfänger-Themen 2
Houly JUnit Test Suite anlegen Java Basics - Anfänger-Themen 6
pun Junit Test erkennt Exception nicht.. Java Basics - Anfänger-Themen 14
G BlueJ jUnit Test Java Basics - Anfänger-Themen 6
V Test mit JUnit verbinden Java Basics - Anfänger-Themen 3
B JUnit Test Klasse Rational Java Basics - Anfänger-Themen 12
C Unsupported major.minor bei jUnit Test Java Basics - Anfänger-Themen 2
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
W JUnit Tests Java Basics - Anfänger-Themen 4
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
L JUnit tests in java Java Basics - Anfänger-Themen 5
N JUnit und private Methoden testen. Java Basics - Anfänger-Themen 9
F JUnit - Was ist mit "side effects" gemeint ? Java Basics - Anfänger-Themen 2
H JUnit in Eclipse: java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 9
L Junit Testing bei XML? Java Basics - Anfänger-Themen 3
J LocalDateTime testen mit Junit Java Basics - Anfänger-Themen 20
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
O JUnit - Objektreferenzen Java Basics - Anfänger-Themen 3
G Testen mit JUnit Java Basics - Anfänger-Themen 4
C JUnit Tests. How to Java Basics - Anfänger-Themen 5
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
L Junit Tests Java Basics - Anfänger-Themen 10
A IllegalArgumentException in JUnit testen Java Basics - Anfänger-Themen 3
V ToString-Methode mit JUnit testen(BlueJ) Java Basics - Anfänger-Themen 10
V JUnit Klassen Java Basics - Anfänger-Themen 3
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
S Kommt es zu Seiteneffekten wenn man waehrend den laufenden JUnit Tests den Code aendert? Java Basics - Anfänger-Themen 2
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5
Z JUnit Exception Java Basics - Anfänger-Themen 2
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
M Ist die Hamcrest Bibliothek auch schon in Junit 4.11 verfügbar? Java Basics - Anfänger-Themen 1
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
M Reihenfolge von Testmethoden in JUnit beeinflussen Java Basics - Anfänger-Themen 2
G JUnit-Tests im Programmdurchlauf starten Java Basics - Anfänger-Themen 4
T Best Practice JUnit: Wie Klassen durch Stubs/Mockups ersetzen Java Basics - Anfänger-Themen 7
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
T Junit in Eclipse Java Basics - Anfänger-Themen 1
P JUnit bedeutungen Java Basics - Anfänger-Themen 3
S JUnit assertEquals funktioniert nichgt wie es sollte :( Java Basics - Anfänger-Themen 7
V Frage zu JUnit Tests Java Basics - Anfänger-Themen 3
B JUnit für JFileChooser Java Basics - Anfänger-Themen 6
S File vergleich - Junit Java Basics - Anfänger-Themen 6
T JUnit Java Basics - Anfänger-Themen 18
G Junit Java Basics - Anfänger-Themen 4
X JUnit testing Java Basics - Anfänger-Themen 7
T JUnit Suite frage Java Basics - Anfänger-Themen 6
S InvocationTargetException bei JUnit Testlauf Java Basics - Anfänger-Themen 2
T Junit --Exception testen Java Basics - Anfänger-Themen 15
A JUnit Tests in Jar-Archiv packen Java Basics - Anfänger-Themen 2
G Erste Schritte JUNIT Regressionstests automatisieren Java Basics - Anfänger-Themen 2
M JUnit - nur einzelne Methode testen? Java Basics - Anfänger-Themen 4
M JUnit - nur Failures loggen? Java Basics - Anfänger-Themen 2
R String Replace für JUnit Java Basics - Anfänger-Themen 19
T JUNIT Nullpointerexception Java Basics - Anfänger-Themen 3
M JUNIT tests mit ant script ausführen Java Basics - Anfänger-Themen 4
S [JUnit] eigener Testsuite Runner + Ausgabe Java Basics - Anfänger-Themen 6
S [JUnit] Print Results while running Java Basics - Anfänger-Themen 6
W Mit jUnit Array testen? Java Basics - Anfänger-Themen 5
T Junit Tests Java Basics - Anfänger-Themen 7
I JUnit Datapoints für mehrere Testklassen Java Basics - Anfänger-Themen 4
M Junit tests gehen nicht Java Basics - Anfänger-Themen 2
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
L JUNIT Testing Java Basics - Anfänger-Themen 3
C jUnit: Erfahren, ob der getestete Code eine Exception gehandelt hat Java Basics - Anfänger-Themen 3
turmaline JUnit testen ob keine Exception auftritt Java Basics - Anfänger-Themen 23
D JUnit auf Matrix anwenden Java Basics - Anfänger-Themen 5
W JUnit 4.X und Parameter Java Basics - Anfänger-Themen 4
xehpuk In JUnit über eigenen Thread testen Java Basics - Anfänger-Themen 3
P JUnit - Optimierung der Testklassen Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Anzeige

Neue Themen


Oben