Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SF][Symfony2][Symfony]problem z testowaniem usług / service
szypi1989
post
Post #1





Grupa: Zarejestrowani
Postów: 207
Pomógł: 0
Dołączył: 7.09.2010

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


Mam nadzieje, że mnie zrozumiecie. Otóż mam problem z testowaniem service . Te service ma parametry , które są wstrzykiwane . Znów te service składa się 2 następnych service (bo one tam do tego głównego service są wstrzykiwane).
Te 2 następne service znów mają jakieś elementy wstrzykiwane . I irytuje mnie to , że muszę jawnie tak wrzucać paramtery / obiekty, bo w testach nie można wstrzykiwać. Czy istnieje jakiś sposób aby to obejść?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





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

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


@rad11 Ale po co tak kombinować?
  1. $request = new Request(...);
  2. $requestStack = new RequestStack();
  3. $requestStack->push($request);
Tak długo jak długo nie trzeba używać żadnych mocków powinno się od nich uciekać. Request / RequestStack to bardzo proste obiekty, które spokojnie można tworzyć sobie na potęgę.

@szypi1989 Tutaj testy dają Ci nawet coś więcej niż pewność, że kod działa. Fakt, że jest Ci je tak trudno napisać ładnie obrazuje to, że kod jest - wybacz za bezpośredniość - słabo napisany. Zadaniem Twojej klasy jest zbudowanie odpowiedniego zapytania SQL/DQL na podstawie jakichś kryteriów. No to w takim razie skup się na tym by robił to i tylko to, korzystając z prostych i specyficznych dla tego problemu (zadania) typów danych.
  1. class AbcSearchCriteria {
  2. private string $name;
  3. private string $value;
  4.  
  5. public __construct(string $name, string $value) { ... }
  6.  
  7. public getName() { return $this->name; }
  8. public getValue() { return $this->value; }
  9. }
  10.  
  11. class AbcSearchQueryBuilder {
  12. public __construct($em, ...)
  13.  
  14. public buildQuery(AbcSearchCriteria $criter) { ... }
  15. }
To że w produkcyjnym kodzie te kryteria będą gdzieś, jakoś budowane na podstawie danych z żądania HTTP nie ma znaczenia dla tej klasy - ona ma się skupić na swoim zadaniu czyli budowaniu odpowiedniego zapytania na podstawie odpowiednich kryteriów. Ten kod strasznie łatwo przetestujesz i co więcej może to być wartościowy test! A co z tą kwestią tworzenia obiektu reprezentującego kryteria? To jest inna część kodu - może być inicjowana gdzieś pewnie na poziomie jakiegoś kontrolera, która powinna być poddana osobnemu testowi - który weryfikuje jedynie czy obiekt kryteriów jest prawidłowo tworzony na podstawie obiektu żądania HTTP.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 30.12.2025 - 15:15