Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [UnitTests] Jak przetestować klasę połączenia IMAP?, Chodzi o ogólne testowanie klas, które używają wbudowanych funkcji PHP
adbacz
post 13.11.2015, 13:17:30
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


Mam stworzoną klasę która używa funkcji imap_* podczas połączenia z serwerem IMAP i zarządzania skrzynkami i pocztą. Jak napisać pod to testy? Można napisać Mocki pod funkcje wbudowane w PHP? Jak to wygląda w takich sytuacjach?
Go to the top of the page
+Quote Post
Crozin
post 13.11.2015, 13:33:32
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Powinieneś mieć osobną klasę, która odpowiedzialna jest wyłącznie za komunikację (imap_*) i osobną do zarządzania. Wtedy możesz tej ostatniej na potrzeby testów wrzucić np. wspomnianego mocka.
Go to the top of the page
+Quote Post
adbacz
post 13.11.2015, 13:53:26
Post #3





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


A co jeśli ta klasa połączenia zawiera w metodach jakąś logikę?

W takim przypadku jak opisałeś, to klasa połączenia będzie tylko takim wrapperem na funkcje imap_*, bo jeśli będzie zawierać jakąś logikę to będzie już ciężko to przetestować. Wraperem na zasadzie - każda metoda tej klasy będzie zawierać tylko jedną linijkę kodu -> wywołanie funkcji imap_*.
Go to the top of the page
+Quote Post
starach
post 13.11.2015, 14:11:25
Post #4





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


"Kontroler ma w d**ie ( a przynajmniej powinien mieć ) skąd pochodzą dane dostarczane przez model."

Dodając kolejną warstwę abstrakcji w postaci klasy transportowej, która by miała być tylko wrapperem dla IMAP pozwalasz na przetestowanie modelu podstawiając mu jako warstwę transportową coś "sztywnego" zamiast wrappera do IMAP. Natomiast sam wrapper do IMAP możesz testować osobno.

Pomyśl o tym jako o sterowniku do bazy danych. "W zasadzie" nie musisz wiedzieć czy dane dostarcza ci MySQL, Postgress czy MSSQL ty je tylko pobierasz, przetwarzasz i prezentujesz czy też zapisujesz.
Go to the top of the page
+Quote Post
adbacz
post 13.11.2015, 14:24:38
Post #5





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


W takim przypadku miałbym 3 warstwy (następna korzystająca z poprzedniej):

1. Bezpośrednio połączenie z serwerem, minimalna ilość logiki.
2. Transport IMAP, czyli listowanie wiadomości, kont pocztowych - najprostszy możliwy rezultat metod, bez ingerencji tej klasy w rezultat, minimalna ilość najpotrzebniejszej logiki.
3. Model IMAP, czyli już konkretne implementacje metod pobierania listy wiadomości, skrzynek - rezultat już modyfikowany przez tą klasę tak, jak "powinien być".

Dobrze myślę?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 14:51