[UnitTests] Jak przetestować klasę połączenia IMAP?, Chodzi o ogólne testowanie klas, które używają wbudowanych funkcji PHP |
[UnitTests] Jak przetestować klasę połączenia IMAP?, Chodzi o ogólne testowanie klas, które używają wbudowanych funkcji PHP |
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?
|
|
|
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.
|
|
|
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_*. |
|
|
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. |
|
|
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ę? |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 14:51 |