• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Test Jednostkowy - IntelIJ

Object Storage Arubacloud
0 głosów
383 wizyt
pytanie zadane 25 października 2018 w Java przez blofeld Użytkownik (700 p.)

Hej. 

Uczę się testów automatycznych. 

Zrobiłem test wedle przykładu ale wywala mi błąd, choć w klasach jest wszystko ok.

package com.company;


import java.util.Scanner;

public class Solver
{

    private double a,b,c;

    public Solver(double a, double b, double c)
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public double[] solve()
    {
        double[] results = null;
        double delta = delta(a, b, c);

        if (delta > 0)
        {
            results = new double[2];
            results[0] = (-b - Math.sqrt(delta) / 2 * a);
            results[1] = (-b + Math.sqrt(delta) / 2 * a);
        }
        else if (delta == 0)
            {
                results = new double[1];
                results[0] = -b / 2 * a;
            }


        return results;

    }

    private double delta(double a, double b, double c)
    {
        return b*b-4*a*c;
    }

}


package com.company;

import java.util.Scanner;

public class QuadricEquation
{
    public static void main(String[] args)
    {
        Scanner raz = new Scanner(System.in);
        System.out.println("Podaj wspólczynnik a");
        double a = raz.nextDouble();
        System.out.println("Podaj współczynnik b");
        double b = raz.nextDouble();
        System.out.println("Podaj współczynnik c");
        double c = raz.nextDouble();
        raz.close();

        Solver solver = new Solver(a,b,c);
        double [] result = solver.solve();

        if(result==null)
        {
            System.out.println("Brak Rozwiązań");
        }
        else
        {
            for(double d : result)
            {
                System.out.println("Rozwiązanie dla x= "+d);
            }
        }
    }
}
package com.company;

import org.junit.Test;

import static org.junit.Assert.*;

public class SolverTest
{
    @Test
    public void test()
    {
        Solver solver = new Solver(1,-7,12);
        double [] result = solver.solve();
        assertEquals(2,result.length);
        assertEquals(3,result[0],0.0000001);
        assertEquals(4,result[1],0.0000001);

    }
}

Ratunku ! :-D

3 odpowiedzi

+1 głos
odpowiedź 26 października 2018 przez RafalS VIP (122,820 p.)
results[0] = (-b - Math.sqrt(delta) / 2 * a);
results[1] = (-b + Math.sqrt(delta) / 2 * a);

Kolejność działań.

W tym momencie pierwiastek z delty dzielisz przez 2 mnozysz go przez a a potem dodajesz do niego -b :D. Chyba nie tak mówi wzór. Chcesz cos takiego:

results[0] = (-b - Math.sqrt(delta)) / (2 * a);
results[1] = (-b + Math.sqrt(delta)) / (2 * a);

 

0 głosów
odpowiedź 25 października 2018 przez Wiciorny Ekspert (269,810 p.)

Uczę się testów automatycznych

To nie jest test atuomatyczny... to jest jednostkowy.

 Jaki błąd Ci wyrzuca, w której asercji ? 

Co robi metoda solve? BO nie widzę jej tuta // dobra widzę 

  assertEquals(2,result.length); ? czemu 2,  długość to długość, a nie liczba elementów :))) 

Problem może leżeć w zaokrągleniu... :) użyj debugera 

komentarz 25 października 2018 przez mbabane Szeryf (79,280 p.)

assertEquals(2,result.length); ? czemu 2,  długość to długość, a nie liczba elementów

W tablicy length to liczba elementów.

komentarz 25 października 2018 przez Wiciorny Ekspert (269,810 p.)
int[] myIntArray = new int[3];

no nie bardzo... bo jest pusta, tak wiem prymitywna tablica bedzie default: wypełniona 0-zerami, ale o to mi chodziło :) 

 

komentarz 25 października 2018 przez blofeld Użytkownik (700 p.)

@Wiciorny, Nie idzie z debuggerem 

A błąd to 

"C:\Program Files\Java\jdk-10.0.1\bin\java" -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.4\IntelIJ\IntelliJ IDEA Community Edition 2017.3.4\lib\idea_rt.jar=64004:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.4\IntelIJ\IntelliJ IDEA Community Edition 2017.3.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.4\IntelIJ\IntelliJ IDEA Community Edition 2017.3.4\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.4\IntelIJ\IntelliJ IDEA Community Edition 2017.3.4\plugins\junit\lib\junit-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.4\IntelIJ\IntelliJ IDEA Community Edition 2017.3.4\plugins\junit\lib\junit5-rt.jar;C:\Users\Ernst Stavro Blofeld\IdeaProjects\JavaFX\src\SiiOne\out\test\SiiOne;C:\Users\Ernst Stavro Blofeld\IdeaProjects\JavaFX\src\SiiOne\out\production\SiiOne;C:\Users\Ernst Stavro Blofeld\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.0.0\junit-jupiter-api-5.0.0.jar;C:\Users\Ernst Stavro Blofeld\.m2\repository\org\apiguardian\apiguardian-api\1.0.0\apiguardian-api-1.0.0.jar;C:\Users\Ernst Stavro Blofeld\.m2\repository\org\opentest4j\opentest4j\1.0.0\opentest4j-1.0.0.jar;C:\Users\Ernst Stavro Blofeld\.m2\repository\org\junit\platform\junit-platform-commons\1.0.0\junit-platform-commons-1.0.0.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.4\IntelIJ\IntelliJ IDEA Community Edition 2017.3.4\lib\junit-4.12.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.4\IntelIJ\IntelliJ IDEA Community Edition 2017.3.4\lib\hamcrest-core-1.3.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.company.SolverTest,test

java.lang.AssertionError: 
Expected :3.0
Actual   :6.5
 <Click to see difference>


	at org.junit.Assert.fail(Assert.java:88)
	at org.junit.Assert.failNotEquals(Assert.java:834)
	at org.junit.Assert.assertEquals(Assert.java:553)
	at org.junit.Assert.assertEquals(Assert.java:683)
	at com.company.SolverTest.test(SolverTest.java:15)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)


Process finished with exit code -1

 

komentarz 25 października 2018 przez mbabane Szeryf (79,280 p.)
edycja 26 października 2018 przez mbabane

@Wiciorny

Nadal chyba nie do końca rozumiem co miałeś na myśli, ponieważ w przypadku kodu, który jest testowany przez pytającego akurat ma to sens, bo jeśli sprawdza przypadek kiedy są 2 pierwiastki to tablica powinna się składać z 2 elementów.

0 głosów
odpowiedź 26 października 2018 przez mbabane Szeryf (79,280 p.)
edycja 26 października 2018 przez mbabane

W sumie masz napisane co jest nie tak:

java.lang.AssertionError: 
Expected :3.0
Actual   :6.5

Są dwie możliwości, albo masz błąd w implementacji metody, albo źle dobrałeś wartości do testu i przez to metoda działa dobrze, ale Ty sprawdzasz ją dla błędnych danych.

Zdaje się że błąd masz w implementacji, a konkretnie tutaj

results[0] = (-b - Math.sqrt(delta) / 2 * a);
results[1] = (-b + Math.sqrt(delta) / 2 * a);

za mało nawiasów lub źle je umieściłeś. Licznik ma się policzyć przed podzieleniem przez 2*a:

results[0] = ( -b - Math.sqrt(delta) ) / (2*a);
results[1] = ( -b + Math.sqrt(delta) ) / (2*a);

Bez nawiasów najpierw dzieliło, potem odejmowało od -b.

1
komentarz 26 października 2018 przez RafalS VIP (122,820 p.)

Blisko, ale jeszcze 

/ 2*a;

dzielenie przez 2 i mnożenie przez a :P

komentarz 26 października 2018 przez mbabane Szeryf (79,280 p.)
A faktycznie. Dzięki za uzupełnienie

(Chociaż to już chyba nie wpłynie na wynik (chociaż głowy nie dam).
komentarz 26 października 2018 przez RafalS VIP (122,820 p.)
Przeważnie nie wpływa bo najczęściej testuje sie trójmiany z a = 1, tak jak tutaj. Kiepskie dane testowe autor dobrał.
komentarz 26 października 2018 przez mbabane Szeryf (79,280 p.)
Tak, masz rację bo jak np. będzie:

2/2*2

to bez nawiasów będzie 2, a z nawisem czyli 2/(2*2) -  wynik 0,5.

Podobne pytania

0 głosów
1 odpowiedź 301 wizyt
0 głosów
1 odpowiedź 233 wizyt
pytanie zadane 11 lutego 2016 w Java przez 0xf Dyskutant (8,180 p.)
0 głosów
2 odpowiedzi 394 wizyt
pytanie zadane 25 stycznia 2016 w Java przez 0xf Dyskutant (8,180 p.)

92,568 zapytań

141,424 odpowiedzi

319,630 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...