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

JUnit testy jendostkowe

Object Storage Arubacloud
0 głosów
352 wizyt
pytanie zadane 11 stycznia 2016 w Java przez natrov Gaduła (3,970 p.)
przywrócone 12 stycznia 2016 przez efiku

Witam, piszę test metody obliczającej sumę pierwiastków x1 i x2 lecz nie wiem z czym porównać otrzymany wynik. Czy w klasie testującej mam na nowo liczyć deltę, x1 i x2, potem porównać to co zostało zwrócone z tym co test obliczył ? Pozdrawiam :)

Metoda obliczająca x1 i x2, oraz zwracająca sumę tych pierwiastków.

public class FunkcjaKwadratowa {
   public double oblicz(double a, double b, double c){
        double delta;
        double x1 = 0, x2 = 0;
        double suma = 0;
       
        if(a != 0){
           delta = Math.pow(b, 2) - 4*a*c;
             if(delta == 0){
               x1 = (-b - Math.sqrt(delta)) / 2*a;
               suma = x1;
            }else if(delta > 0){
               x1 = (-b - Math.sqrt(delta)) / 2*a;
               x2 = (-b + Math.sqrt(delta)) / 2*a;
               suma = x1 + x2;
            }
        }
        return suma;
    } 
}

Metoda testująca.

 @Test
    public void testOblicz() {
        System.out.println("oblicz");
        double a = 1.0;
        double b = 4.0;
        double c = 3.0;
        FunkcjaKwadratowa instance = new FunkcjaKwadratowa();
        double wynik = instance.oblicz(a, b, c);
        assertEquals("Coś nie tak. ",wynik, TUTAJ);
    }

 

2 odpowiedzi

0 głosów
odpowiedź 11 stycznia 2016 przez efiku Szeryf (75,160 p.)
Jeżeli robisz assertEquals to porównujesz coś co wiesz jakie ma być czymś co chcesz przetestować.

Oblicz sobie ile na kartce wyjdzie suma pierwiastków.

http://junit.org/apidocs/org/junit/Assert.html#assertEquals(java.lang.String, double, double, double)

np. assertEquals( "wiadomosc", 3, ( 1+ 2) , 0);
komentarz 11 stycznia 2016 przez natrov Gaduła (3,970 p.)
Ale jak zmienię dane wejściowe to muszę liczyć sumę na nowo, nie da się automatycznie zmieniać sumy pierwiastków w teście ?
komentarz 11 stycznia 2016 przez efiku Szeryf (75,160 p.)

to sobie zrób assert na kilka wartości? 

  • - assert dla delty większej od 0 
  • - assert dla delty równej 0 
  • - assett dla delty < 0
  • - assert dla a = 0 

Ale jak zmienię dane wejściowe to muszę liczyć sumę na nowo, nie da się automatycznie zmieniać sumy pierwiastków w teście ?

hmm a co właśnie testujesz, jak nie funkcje która sumuje Ci pierwiastki?? 

Najpierw zbuduj sobie test, później podaj oczekiwane sumy dla danych które znasz , buduj funkcje.

Podejście TDD:

komentarz 11 stycznia 2016 przez efiku Szeryf (75,160 p.)
Mogłem gdzieś pominąć jeden test, bo masz 3 warunki więc będzie na oko 6 testów :d aby mieć code coverage na 100%
komentarz 12 stycznia 2016 przez efiku Szeryf (75,160 p.)

Czemu ukrywasz pytanie? 

Łap kilka ciekawych screenów:

 

Łap kod do junita https://gist.github.com/efiku/75495266a370f156418f tylko sobie pozmieniaj i rób refactor ;)

Pozdrawiam.

0 głosów
odpowiedź 11 stycznia 2016 przez natrov Gaduła (3,970 p.)
edycja 11 stycznia 2016 przez natrov

Mogę to tak zrobić? Chodzi mi głównie o optymalność,żeby nie pisać czegoś co można dokonać inaczej - prościej.

Metoda obliczeniowa.

public double oblicz(double a, double b, double c){
        double delta;
        double x1 = 0, x2 = 0;
        double suma = 0;
       
        if(a != 0){
           delta = Math.pow(b, 2) - 4*a*c;
             if(delta == 0){
               x1 = (-b - Math.sqrt(delta)) / 2*a;
               suma = x1;
            }else if(delta > 0){
               x2 = (-b + Math.sqrt(delta)) / 2*a;
               suma = x1 + x2;
            }
        }
        return suma;
    } 

Metoda sprawdzająca.

 ​
public void testOblicz() {
        System.out.println("oblicz");
        double a = 0.0;
        double b = 1.0;
        double c = 3.0;

        double delta = Math.pow(b, 2) - 4 * a * c;
        double x1 = 0, x2 = 0;

        if (delta >= 0) {
            x1 = (-b - Math.sqrt(delta)) / 2 * a;
            if (delta > 0) {
                x1 = (-b - Math.sqrt(delta)) / 2 * a;
                x2 = (-b + Math.sqrt(delta)) / 2 * a;
            }
        }

        FunkcjaKwadratowa instance = new FunkcjaKwadratowa();
        double wynik = instance.oblicz(a, b, c);
        assertEquals("wiadomosc", wynik, x1 + x2, 0);
    }
komentarz 11 stycznia 2016 przez efiku Szeryf (75,160 p.)
Szkoda, że nie zrozumiałeś mojej wypowiedzi. Cóż, nie jestem Ci w stanie pomóc, może znajdzie się tu ktoś inny. Zasze możesz sobie zrobić metodę prywatną która przygotowuje Ci jakieś dane, dzięki którym nie duplikujesz kodu. Ja bym zerknął na jakiś data provider. Pierwszy wynik z google: https://github.com/TNG/junit-dataprovider/wiki
komentarz 11 stycznia 2016 przez event15 Szeryf (93,790 p.)
Nie kumasz o co chodzi w testowaniu. Duplikujesz kod zamiast sprawdzać jego poprawność.

Przykładowo dla dodawania dwóch liczb powinno być:

a = 1, b = 2;
assertEquals(4, a, b);

(To był pseudokod)

Chodzi o to, że podajesz z palca oczekiwany wynik tutaj dla zmiennych.

Zobacz, co masz u siebie - duplikacja kodu, łamanie SRP.

Test nie sprawdza działania, tylko wynik jakiejś funkcjonalności.

Podobne pytania

0 głosów
1 odpowiedź 380 wizyt
pytanie zadane 4 maja 2021 w Java przez janyczek Początkujący (360 p.)
0 głosów
0 odpowiedzi 318 wizyt
pytanie zadane 24 listopada 2019 w Java przez JuniorPL Użytkownik (770 p.)
0 głosów
5 odpowiedzi 1,002 wizyt
pytanie zadane 2 sierpnia 2018 w Java przez must Bywalec (2,980 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...