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

JUnit testy jendostkowe

Aruba Cloud - Virtual Private Server VPS
0 głosów
440 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ź 486 wizyt
pytanie zadane 4 maja 2021 w Java przez janyczek Początkujący (360 p.)
0 głosów
0 odpowiedzi 444 wizyt
pytanie zadane 24 listopada 2019 w Java przez JuniorPL Użytkownik (770 p.)
0 głosów
5 odpowiedzi 1,570 wizyt
pytanie zadane 2 sierpnia 2018 w Java przez must Bywalec (2,980 p.)

93,329 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,662 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...