SlideShare a Scribd company logo
1 of 42
Download to read offline
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009




                       Testy jednostkowe w J2ME

                                 Marcin Stachniuk
                               mstachniuk@gmail.com

                              Politechnika Wrocławska
                                 Wydział Elektroniki
           Studenckie Koło Naukowe Informatyki Systemów Autonomicznych
                               i Adaptacyjnych ISA2


                                     18 grudnia 2009




Marcin Stachniuk                                                         Testy jednostkowe w J2ME     1/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Plan prezentacji


  1   Wstęp

  2   Tworzenie testów JMUnit

  3   Przykładowy test

  4   Dalsze informacje o testach

  5   Podsumowanie




  Marcin Stachniuk                                                         Testy jednostkowe w J2ME     2/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Plan prezentacji


  1   Wstęp

  2   Tworzenie testów JMUnit

  3   Przykładowy test

  4   Dalsze informacje o testach

  5   Podsumowanie




  Marcin Stachniuk                                                         Testy jednostkowe w J2ME     3/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Wstęp


  Czy są testy jednostkowe?
  Definicja (wg. Wikipedii)
  Test jednostkowy (ang. unit test, test modułowy) to w
  programowaniu metoda testowania tworzonego oprogramowania
  poprzez wykonywanie testów weryfikujących poprawność działania
  pojedynczych elementów (jednostek) programu - np. metod lub
  obiektów w programowaniu obiektowym lub procedur w
  programowaniu proceduralnym.

  http://pl.wikipedia.org/wiki/Test jednostkowy




  Marcin Stachniuk                                                           Testy jednostkowe w J2ME     4/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Czyli...




   Czyli...
     1   Posiadamy metodę (którą chcemy przetestować)
     2   Wywołujemy ją (przekazując pewne argumenty)
     3   Zapamiętujemy wynik (zwrócony rezultat)
     4   Porównujemy, czy wynik jest zgodny z oczekiwaniem




   Marcin Stachniuk                                                         Testy jednostkowe w J2ME     5/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Czyli...




   Czyli...
     1   Posiadamy metodę (którą chcemy przetestować)
     2   Wywołujemy ją (przekazując pewne argumenty)
     3   Zapamiętujemy wynik (zwrócony rezultat)
     4   Porównujemy, czy wynik jest zgodny z oczekiwaniem




   Marcin Stachniuk                                                         Testy jednostkowe w J2ME     5/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Czyli...




   Czyli...
     1   Posiadamy metodę (którą chcemy przetestować)
     2   Wywołujemy ją (przekazując pewne argumenty)
     3   Zapamiętujemy wynik (zwrócony rezultat)
     4   Porównujemy, czy wynik jest zgodny z oczekiwaniem




   Marcin Stachniuk                                                         Testy jednostkowe w J2ME     5/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Czyli...




   Czyli...
     1   Posiadamy metodę (którą chcemy przetestować)
     2   Wywołujemy ją (przekazując pewne argumenty)
     3   Zapamiętujemy wynik (zwrócony rezultat)
     4   Porównujemy, czy wynik jest zgodny z oczekiwaniem




   Marcin Stachniuk                                                         Testy jednostkowe w J2ME     5/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Gdzie...




  Gdzie należy umieszczać metody testujące?
         w metodzie main() ? NIE!!!
         istnieje lepsze rozwiązanie...




   Marcin Stachniuk                                                         Testy jednostkowe w J2ME     6/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Gdzie...




  Gdzie należy umieszczać metody testujące?
         w metodzie main() ? NIE!!!
         istnieje lepsze rozwiązanie...




   Marcin Stachniuk                                                         Testy jednostkowe w J2ME     6/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Gdzie...




  Gdzie należy umieszczać metody testujące?
         w metodzie main() ? NIE!!!
         istnieje lepsze rozwiązanie...




   Marcin Stachniuk                                                         Testy jednostkowe w J2ME     6/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

X-unit frameworks




  Z pomocą przychodzą nam:




                     X-unit frameworks!



  Marcin Stachniuk                                                         Testy jednostkowe w J2ME     7/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

X-unit frameworks


  X-unit frameworks:
        JUnit (Java)
        JMUnit (J2ME)
        J2MEUnit (J2ME)
        NUnit (C#)
        CPPUnit (C++)
        PyUnit (Python)
        SUnit (Smalltalk)
        JSUnit (JavaScript)
        fUnit (Fortran)



  Marcin Stachniuk                                                         Testy jednostkowe w J2ME     8/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                        18 grudnia 2009

Plan prezentacji


  1   Wstęp

  2   Tworzenie testów JMUnit

  3   Przykładowy test

  4   Dalsze informacje o testach

  5   Podsumowanie




  Marcin Stachniuk                                                         Testy jednostkowe w J2ME     9/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Tworzenie testów




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     10/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Tworzenie testów




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     11/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Tworzenie testów




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     12/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Tworzenie testów




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     13/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Klasa TestCase




  Klasa TestCase:
        TestCase(int totalOfTests, String name) - konstruktor
        test(int testNumber) - metoda wywołująca kolejne testy
        setUp() - metoda wywoływana przed każdym testem
        tearDown() - metoda wywoływana po każdym teście




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     14/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Assercje



  Assercje
  Służą do porównywania rezultatów z oczekiwaniami.
  Wszystkie rzucają AssertionFailedException.

  Assercje:
        assertEquals(int expected, int actual)
        assertEquals(String test, int expected, int actual)
        assertNotEquals(int expected, int actual)
        assertNotEquals(String test, int expected, int actual)




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     15/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Assercje


  Zaawansowane Assercje:
        assertNull(Object object)
        assertNotNull(Object object)
        assertSame(Object expected, Object actual)
        assertNotSame(Object expected, Object actual)
        assertTrue(boolean expression)
        assertFalse(boolean expression)
        fail(String test)
        własne assercje




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     16/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Co powinno w takim teście być?




    Co powinno w takim teście (metodzie testującej) być?
1   // given - przygotowanie obiektów
2   ...
3
4   // when - wykonanie testowanej metody
5   ...
6
7   // then - sprawdzenie wyniku
8   ...




    Marcin Stachniuk                                                    Testy jednostkowe w J2ME     17/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Plan prezentacji


  1   Wstęp

  2   Tworzenie testów JMUnit

  3   Przykładowy test

  4   Dalsze informacje o testach

  5   Podsumowanie




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     18/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Metoda do testowania



  Metoda do testowania:
  Zwraca sumę liczb podanych jako argument w tablicy.
1 public int sum(int [] tab) {
2   int sum = 0;
3   for (int i = 0; i < tab.length-1; i++) {
4     sum = sum = tab[i];
5   }
6   return sum;
7 }




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     19/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Metoda testująca 1

   Metoda testująca 1:
   Sprawdza, czy metoda dobrze zsumuje tablicę, w której jest tylko
   wartość 0 (zero).
 1 public void testSum01() throws AssertionFailedException {
 2   System.out.println(’’sum’’);
 3
 4   // given
 5   MyClass instance = new MyClass();
 6   int[] tab1 = new int [] {0};
 7
 8   // when
 9   int result1 = instance.sum(tab1);
10
11   // then
12   assertEquals(0, result1);
13 }




   Marcin Stachniuk                                                    Testy jednostkowe w J2ME     20/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Metoda testująca 2

   Metoda testująca 2:
   Sprawdza, czy metoda dobrze zsumuje tablicę, w której są wartości
   5 i 0 (zero).
 1 public void testSum02() throws AssertionFailedException {
 2   System.out.println(’’sum’’);
 3
 4   // given
 5   MyClass instance = new MyClass();
 6   int[] tab1 = new int [] {5,0};
 7
 8   // when
 9   int result1 = instance.sum(tab1);
10
11   // then
12   assertEquals(5, result1);
13 }




   Marcin Stachniuk                                                    Testy jednostkowe w J2ME     21/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Szkielet testu


 1 public class MyClassTest extends TestCase {
 2   public MyClassTest() {
 3     super(2, ’’MyClassTest’’);
 4   }
 5
 6   public void test(int testNumber) throws Throwable {
 7     switch (testNumber) {
 8       case 0:
 9         testSum01();
10         break;
11       case 1:
12         testSum02();
13         break;
14       }
15   }
16 // ...
17 }




   Marcin Stachniuk                                                    Testy jednostkowe w J2ME     22/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Sprawdzamy przykład...




                                             Test01.zip




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     23/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                      18 grudnia 2009

...dopisujemy kolejne testy...




                                  http://hsc10.com/appEngProgramer.png


   Marcin Stachniuk                                                      Testy jednostkowe w J2ME     24/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

... i nie działa!




                                              Test02.zip




   Marcin Stachniuk                                                    Testy jednostkowe w J2ME     25/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Dobry test



               To znaczy ze test był dobrze napisany :)




  http://upload.wikimedia.org/wikipedia/commons/8/80/Symbol OK.svg




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     26/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Testowanie wyjątków




1 public void testException() {
2   try {
3     sortMyList(null);
4     fail(’’Metoda powinna wygenerować wyjątek’’);
5   } catch (RuntimeException e) {
6     assertTrue(true);
7   }
8 }




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     27/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Plan prezentacji


  1   Wstęp

  2   Tworzenie testów JMUnit

  3   Przykładowy test

  4   Dalsze informacje o testach

  5   Podsumowanie




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     28/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Co testować?



  Co testować:
        Czy wyniki są poprawne?
        Czy warunki brzegowe zostały prawidłowo określone?
        Czy można sprawdzić relacje zachodzące w odwrotnym
        kierunku?
        Czy można sprawdzić wyniki w alternatywny sposób?
        Czy można wymusić błędy?
        Czy efektywność jest zadowalająca?




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     29/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Kiedy testować?




  Kiedy testować:
        Po napisaniu nowej metody
        Po poprawieniu błędu
        Po każdej udanej kompilacji
        Po wprowadzeniu kodu do systemu kontroli wersji
        Podczas refaktoringu




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     30/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Kiedy pisać testy?




  Kiedy pisać testy:
        Gdy cały kod jest gotowy?
        Równolegle z kodem?
        Przed napisaniem kodu?




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     31/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

TDD

 TDD Test-driven development - Programowanie sterowane testami




        Piszemy test(y)
        Implementujemy
        Refaktoryzujemy
 http://chakkaradeep.files.wordpress.com/2008/01/tdd.png




 Marcin Stachniuk                                                     Testy jednostkowe w J2ME     32/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Plan prezentacji


  1   Wstęp

  2   Tworzenie testów JMUnit

  3   Przykładowy test

  4   Dalsze informacje o testach

  5   Podsumowanie




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     33/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Co dalej?




  O czym nie zostało jeszcze tutaj powiedziane:
        J2MEUnit - framework podobny do JMUnita
        Hammock Mock Objects for Java ME - obiekty zastępcze
        Jak pisać ładne testy
        Jak pisać testowalny kod




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     34/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Pytania




                                     Pytania?




  Marcin Stachniuk                                                    Testy jednostkowe w J2ME     35/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                    18 grudnia 2009

Na koniec cos śmiesznego




  http://static.zooomr.com/images/3733898 810f1f2c70.jpg
   Marcin Stachniuk                                                    Testy jednostkowe w J2ME     36/37
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                         18 grudnia 2009

Więcej informacji

        Kontakt z autorem:
        mstachniuk@gmail.com
        Strona koła naukowego ISA2
        http://autonom.ict.pwr.wroc.pl/
        Strona warsztatów:
        http://autonom.ict.pwr.wroc.pl/∼mstachniuk
        JMUnit
        http://jmunit.sourceforge.net/
        JMUnit1.2 User guide
        http://hammingweight.com/modules/jmunit/userguide.pdf
        JMUnit API
        http://hammingweight.com/modules/jmunit/api/index.html
        Test-driven development
        http://pl.wikipedia.org/wiki/Test-driven development
        Programowanie poprzez testy z wykorzystaniem JUnit (Politechnika Wrocławska)
        http://gromit.ict.pwr.wroc.pl/p inf/w/jUnit.pdf
        Bartosz Bańkowski, ”Pitfalls of TDD Adoption”
        http://agileee.org/schedule/BB/
        Szczepan Faber, ”Java: tools & techniques for TDD”
        http://agileee.org/schedule/SF/
        JUnit Pragmatyczne testy jednostkowe w Javie - Andrew Hunt, David Thomas, Helion 2006




  Marcin Stachniuk                                                         Testy jednostkowe w J2ME     37/37

More Related Content

More from MarcinStachniuk

Wroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaWroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaMarcinStachniuk
 
[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za małoMarcinStachniuk
 
GraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoGraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoMarcinStachniuk
 
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedBruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedMarcinStachniuk
 
[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using ShipkitMarcinStachniuk
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedMarcinStachniuk
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąMarcinStachniuk
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychMarcinStachniuk
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oMarcinStachniuk
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseMarcinStachniuk
 
Zastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oZastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oMarcinStachniuk
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017MarcinStachniuk
 

More from MarcinStachniuk (20)

Wroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaWroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in Java
 
[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało
 
GraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoGraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za mało
 
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedBruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
 
[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.org
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learned
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologią
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danych
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4o
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object database
 
Zastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oZastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4o
 
Wprowadzenie do J2ME
Wprowadzenie do J2MEWprowadzenie do J2ME
Wprowadzenie do J2ME
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
 

08 Testy Jednostkowe w j2me

  • 1. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Testy jednostkowe w J2ME Marcin Stachniuk mstachniuk@gmail.com Politechnika Wrocławska Wydział Elektroniki Studenckie Koło Naukowe Informatyki Systemów Autonomicznych i Adaptacyjnych ISA2 18 grudnia 2009 Marcin Stachniuk Testy jednostkowe w J2ME 1/37
  • 2. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Plan prezentacji 1 Wstęp 2 Tworzenie testów JMUnit 3 Przykładowy test 4 Dalsze informacje o testach 5 Podsumowanie Marcin Stachniuk Testy jednostkowe w J2ME 2/37
  • 3. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Plan prezentacji 1 Wstęp 2 Tworzenie testów JMUnit 3 Przykładowy test 4 Dalsze informacje o testach 5 Podsumowanie Marcin Stachniuk Testy jednostkowe w J2ME 3/37
  • 4. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Wstęp Czy są testy jednostkowe? Definicja (wg. Wikipedii) Test jednostkowy (ang. unit test, test modułowy) to w programowaniu metoda testowania tworzonego oprogramowania poprzez wykonywanie testów weryfikujących poprawność działania pojedynczych elementów (jednostek) programu - np. metod lub obiektów w programowaniu obiektowym lub procedur w programowaniu proceduralnym. http://pl.wikipedia.org/wiki/Test jednostkowy Marcin Stachniuk Testy jednostkowe w J2ME 4/37
  • 5. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Czyli... Czyli... 1 Posiadamy metodę (którą chcemy przetestować) 2 Wywołujemy ją (przekazując pewne argumenty) 3 Zapamiętujemy wynik (zwrócony rezultat) 4 Porównujemy, czy wynik jest zgodny z oczekiwaniem Marcin Stachniuk Testy jednostkowe w J2ME 5/37
  • 6. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Czyli... Czyli... 1 Posiadamy metodę (którą chcemy przetestować) 2 Wywołujemy ją (przekazując pewne argumenty) 3 Zapamiętujemy wynik (zwrócony rezultat) 4 Porównujemy, czy wynik jest zgodny z oczekiwaniem Marcin Stachniuk Testy jednostkowe w J2ME 5/37
  • 7. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Czyli... Czyli... 1 Posiadamy metodę (którą chcemy przetestować) 2 Wywołujemy ją (przekazując pewne argumenty) 3 Zapamiętujemy wynik (zwrócony rezultat) 4 Porównujemy, czy wynik jest zgodny z oczekiwaniem Marcin Stachniuk Testy jednostkowe w J2ME 5/37
  • 8. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Czyli... Czyli... 1 Posiadamy metodę (którą chcemy przetestować) 2 Wywołujemy ją (przekazując pewne argumenty) 3 Zapamiętujemy wynik (zwrócony rezultat) 4 Porównujemy, czy wynik jest zgodny z oczekiwaniem Marcin Stachniuk Testy jednostkowe w J2ME 5/37
  • 9. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Gdzie... Gdzie należy umieszczać metody testujące? w metodzie main() ? NIE!!! istnieje lepsze rozwiązanie... Marcin Stachniuk Testy jednostkowe w J2ME 6/37
  • 10. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Gdzie... Gdzie należy umieszczać metody testujące? w metodzie main() ? NIE!!! istnieje lepsze rozwiązanie... Marcin Stachniuk Testy jednostkowe w J2ME 6/37
  • 11. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Gdzie... Gdzie należy umieszczać metody testujące? w metodzie main() ? NIE!!! istnieje lepsze rozwiązanie... Marcin Stachniuk Testy jednostkowe w J2ME 6/37
  • 12. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 X-unit frameworks Z pomocą przychodzą nam: X-unit frameworks! Marcin Stachniuk Testy jednostkowe w J2ME 7/37
  • 13. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 X-unit frameworks X-unit frameworks: JUnit (Java) JMUnit (J2ME) J2MEUnit (J2ME) NUnit (C#) CPPUnit (C++) PyUnit (Python) SUnit (Smalltalk) JSUnit (JavaScript) fUnit (Fortran) Marcin Stachniuk Testy jednostkowe w J2ME 8/37
  • 14. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Plan prezentacji 1 Wstęp 2 Tworzenie testów JMUnit 3 Przykładowy test 4 Dalsze informacje o testach 5 Podsumowanie Marcin Stachniuk Testy jednostkowe w J2ME 9/37
  • 15. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Tworzenie testów Marcin Stachniuk Testy jednostkowe w J2ME 10/37
  • 16. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Tworzenie testów Marcin Stachniuk Testy jednostkowe w J2ME 11/37
  • 17. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Tworzenie testów Marcin Stachniuk Testy jednostkowe w J2ME 12/37
  • 18. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Tworzenie testów Marcin Stachniuk Testy jednostkowe w J2ME 13/37
  • 19. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Klasa TestCase Klasa TestCase: TestCase(int totalOfTests, String name) - konstruktor test(int testNumber) - metoda wywołująca kolejne testy setUp() - metoda wywoływana przed każdym testem tearDown() - metoda wywoływana po każdym teście Marcin Stachniuk Testy jednostkowe w J2ME 14/37
  • 20. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Assercje Assercje Służą do porównywania rezultatów z oczekiwaniami. Wszystkie rzucają AssertionFailedException. Assercje: assertEquals(int expected, int actual) assertEquals(String test, int expected, int actual) assertNotEquals(int expected, int actual) assertNotEquals(String test, int expected, int actual) Marcin Stachniuk Testy jednostkowe w J2ME 15/37
  • 21. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Assercje Zaawansowane Assercje: assertNull(Object object) assertNotNull(Object object) assertSame(Object expected, Object actual) assertNotSame(Object expected, Object actual) assertTrue(boolean expression) assertFalse(boolean expression) fail(String test) własne assercje Marcin Stachniuk Testy jednostkowe w J2ME 16/37
  • 22. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Co powinno w takim teście być? Co powinno w takim teście (metodzie testującej) być? 1 // given - przygotowanie obiektów 2 ... 3 4 // when - wykonanie testowanej metody 5 ... 6 7 // then - sprawdzenie wyniku 8 ... Marcin Stachniuk Testy jednostkowe w J2ME 17/37
  • 23. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Plan prezentacji 1 Wstęp 2 Tworzenie testów JMUnit 3 Przykładowy test 4 Dalsze informacje o testach 5 Podsumowanie Marcin Stachniuk Testy jednostkowe w J2ME 18/37
  • 24. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Metoda do testowania Metoda do testowania: Zwraca sumę liczb podanych jako argument w tablicy. 1 public int sum(int [] tab) { 2 int sum = 0; 3 for (int i = 0; i < tab.length-1; i++) { 4 sum = sum = tab[i]; 5 } 6 return sum; 7 } Marcin Stachniuk Testy jednostkowe w J2ME 19/37
  • 25. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Metoda testująca 1 Metoda testująca 1: Sprawdza, czy metoda dobrze zsumuje tablicę, w której jest tylko wartość 0 (zero). 1 public void testSum01() throws AssertionFailedException { 2 System.out.println(’’sum’’); 3 4 // given 5 MyClass instance = new MyClass(); 6 int[] tab1 = new int [] {0}; 7 8 // when 9 int result1 = instance.sum(tab1); 10 11 // then 12 assertEquals(0, result1); 13 } Marcin Stachniuk Testy jednostkowe w J2ME 20/37
  • 26. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Metoda testująca 2 Metoda testująca 2: Sprawdza, czy metoda dobrze zsumuje tablicę, w której są wartości 5 i 0 (zero). 1 public void testSum02() throws AssertionFailedException { 2 System.out.println(’’sum’’); 3 4 // given 5 MyClass instance = new MyClass(); 6 int[] tab1 = new int [] {5,0}; 7 8 // when 9 int result1 = instance.sum(tab1); 10 11 // then 12 assertEquals(5, result1); 13 } Marcin Stachniuk Testy jednostkowe w J2ME 21/37
  • 27. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Szkielet testu 1 public class MyClassTest extends TestCase { 2 public MyClassTest() { 3 super(2, ’’MyClassTest’’); 4 } 5 6 public void test(int testNumber) throws Throwable { 7 switch (testNumber) { 8 case 0: 9 testSum01(); 10 break; 11 case 1: 12 testSum02(); 13 break; 14 } 15 } 16 // ... 17 } Marcin Stachniuk Testy jednostkowe w J2ME 22/37
  • 28. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Sprawdzamy przykład... Test01.zip Marcin Stachniuk Testy jednostkowe w J2ME 23/37
  • 29. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 ...dopisujemy kolejne testy... http://hsc10.com/appEngProgramer.png Marcin Stachniuk Testy jednostkowe w J2ME 24/37
  • 30. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 ... i nie działa! Test02.zip Marcin Stachniuk Testy jednostkowe w J2ME 25/37
  • 31. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Dobry test To znaczy ze test był dobrze napisany :) http://upload.wikimedia.org/wikipedia/commons/8/80/Symbol OK.svg Marcin Stachniuk Testy jednostkowe w J2ME 26/37
  • 32. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Testowanie wyjątków 1 public void testException() { 2 try { 3 sortMyList(null); 4 fail(’’Metoda powinna wygenerować wyjątek’’); 5 } catch (RuntimeException e) { 6 assertTrue(true); 7 } 8 } Marcin Stachniuk Testy jednostkowe w J2ME 27/37
  • 33. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Plan prezentacji 1 Wstęp 2 Tworzenie testów JMUnit 3 Przykładowy test 4 Dalsze informacje o testach 5 Podsumowanie Marcin Stachniuk Testy jednostkowe w J2ME 28/37
  • 34. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Co testować? Co testować: Czy wyniki są poprawne? Czy warunki brzegowe zostały prawidłowo określone? Czy można sprawdzić relacje zachodzące w odwrotnym kierunku? Czy można sprawdzić wyniki w alternatywny sposób? Czy można wymusić błędy? Czy efektywność jest zadowalająca? Marcin Stachniuk Testy jednostkowe w J2ME 29/37
  • 35. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Kiedy testować? Kiedy testować: Po napisaniu nowej metody Po poprawieniu błędu Po każdej udanej kompilacji Po wprowadzeniu kodu do systemu kontroli wersji Podczas refaktoringu Marcin Stachniuk Testy jednostkowe w J2ME 30/37
  • 36. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Kiedy pisać testy? Kiedy pisać testy: Gdy cały kod jest gotowy? Równolegle z kodem? Przed napisaniem kodu? Marcin Stachniuk Testy jednostkowe w J2ME 31/37
  • 37. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 TDD TDD Test-driven development - Programowanie sterowane testami Piszemy test(y) Implementujemy Refaktoryzujemy http://chakkaradeep.files.wordpress.com/2008/01/tdd.png Marcin Stachniuk Testy jednostkowe w J2ME 32/37
  • 38. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Plan prezentacji 1 Wstęp 2 Tworzenie testów JMUnit 3 Przykładowy test 4 Dalsze informacje o testach 5 Podsumowanie Marcin Stachniuk Testy jednostkowe w J2ME 33/37
  • 39. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Co dalej? O czym nie zostało jeszcze tutaj powiedziane: J2MEUnit - framework podobny do JMUnita Hammock Mock Objects for Java ME - obiekty zastępcze Jak pisać ładne testy Jak pisać testowalny kod Marcin Stachniuk Testy jednostkowe w J2ME 34/37
  • 40. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Pytania Pytania? Marcin Stachniuk Testy jednostkowe w J2ME 35/37
  • 41. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Na koniec cos śmiesznego http://static.zooomr.com/images/3733898 810f1f2c70.jpg Marcin Stachniuk Testy jednostkowe w J2ME 36/37
  • 42. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 18 grudnia 2009 Więcej informacji Kontakt z autorem: mstachniuk@gmail.com Strona koła naukowego ISA2 http://autonom.ict.pwr.wroc.pl/ Strona warsztatów: http://autonom.ict.pwr.wroc.pl/∼mstachniuk JMUnit http://jmunit.sourceforge.net/ JMUnit1.2 User guide http://hammingweight.com/modules/jmunit/userguide.pdf JMUnit API http://hammingweight.com/modules/jmunit/api/index.html Test-driven development http://pl.wikipedia.org/wiki/Test-driven development Programowanie poprzez testy z wykorzystaniem JUnit (Politechnika Wrocławska) http://gromit.ict.pwr.wroc.pl/p inf/w/jUnit.pdf Bartosz Bańkowski, ”Pitfalls of TDD Adoption” http://agileee.org/schedule/BB/ Szczepan Faber, ”Java: tools & techniques for TDD” http://agileee.org/schedule/SF/ JUnit Pragmatyczne testy jednostkowe w Javie - Andrew Hunt, David Thomas, Helion 2006 Marcin Stachniuk Testy jednostkowe w J2ME 37/37