/ / Wolisz zastrzyki zależne od częściowego wyśmiewania? - wstrzykiwanie zależności, odwracanie kontroli, ocmock, częściowe próby

Wolisz wtrysk zależności od częściowego szyderstwa? - iniekcja zależności, inwersja kontroli, ocmock, częściowe drwalki

wiem to Pytanie SO, ale dotyczy ono tematu w sposób bardziej ogólny.

Czy powinienem preferować używanie częściowych Mocków nad wtryskiem zależności? Moje pytanie opiera się na następującym cytacie z OCMock:

id aMock = [OCMockObject partialMockForObject:anObject]

Tworzy pozorowany obiekt, którego można użyć wtak samo jak anObject. Kiedy wywoływana jest metoda, która nie jest zaostrzona zostanie przekazany anObject. Kiedy metoda stubbed jest wywoływana za pomocą a odwołanie do anObject, a nie drwi, nadal będzie obsługiwany przez drwić.

Oznacza to, że mogę odrzucić moje (zależne od właściwości) zależności, używając częściowego makiety zamiast wstrzykiwać je do konstruktora (lub poprzez wstrzykiwanie setera).

Odpowiedzi:

3 dla odpowiedzi № 1

Powinieneś zaprojektować swój interfejs API tak, aby miał sens jako interfejs API ogólnego przeznaczenia, w szczególności do obsługi testów jednostkowych lub dynamicznych makiet.

Sugerowany wzór jest po prostu odmianą Metoda szablonów wzorzec projektowy, z wyjątkiem tego, że metoda jestwłasność. Jeśli uważasz, że generalnie sensowne jest zaimplementowanie dostępu do zależności jako właściwości wirtualnych, możesz użyć opisanej techniki. Jest to dobrze znana technika testowania jednostkowego zwana wyodrębnić i zastąpić.

Jednak różniłbym się od tego z wielu innych powodów.

  • Nawet jeśli możesz zastąpić zależność, domyślne ustawienie może przeciągać się w odniesieniu do „rzeczywistej”, zamierzonej zależności, tworząc ściślejsze sprzężenie, niż możesz chcieć.
  • Jeśli zapomnisz wyodrębnić i zastąpić, używana jest domyślna zależność i możesz tego nie chcieć. Czasami lepiej jest wyraźnie określić zamierzone użycie.