Na przykład, co to oznacza w tym cytacie?
Integracja z zewnętrznym API to prawie gwarancja w każdej nowoczesnej aplikacji internetowej. Aby skutecznie przetestować taką integrację, trzeba skrótową go. Dobry kod pośredniczący powinien być łatwy do utworzenia i stale aktualizowany z rzeczywistymi, aktualnymi odpowiedziami API. W tym poście przedstawimy strategię testowania przy użyciu kodów pośredniczących dla zewnętrznego interfejsu API.
Odpowiedzi:
Kod pośredniczący jest kontrolowanym zamiennikiem istniejącej zależności (lub współpracownika) w systemie. Używając kodu pośredniczącego, możesz przetestować kod bez zajmowania się bezpośrednio zależnością.
Zależność zewnętrzna - istniejąca zależność:
jest to obiekt w systemie, z którym testowany kod współdziała i nad którym nie masz kontroli. (Typowe przykłady to systemy plików, wątki, pamięć, czas itd.)
Na przykład w poniższym kodzie:
Chcesz przetestować metodę mailService.SendEMail () , ale aby to zrobić, musisz zasymulować wyjątek w swojej metodzie testowej, więc wystarczy utworzyć obiekt Fake Stub errorService, aby zasymulować żądany wynik, a następnie kod testowy będzie w stanie przetestować metodę mailService.SendEMail () . Jak widzisz, musisz zasymulować wynik, który pochodzi z innego obiektu Dependency, który jest obiektem klasy ErrorService (obiekt Existing Dependency).
źródło
Stub , w tym kontekście oznacza mock wdrożenia.
Oznacza to prostą, fałszywą implementację, która jest zgodna z interfejsem i ma być używana do testowania.
źródło
Warunki Laymana to fikcyjne dane (lub fałszywe dane, dane testowe ... itd.), Których możesz użyć do testowania lub rozwijania kodu, dopóki Ty (lub druga strona) nie będziecie gotowi do prezentowania / odbierania prawdziwych danych. To "Lorem Ipsum" programisty.
Baza danych pracowników nie jest gotowa? Wymyśl proste z Jane Doe, John Doe ... itd. API nie jest gotowe? Zrób fałszywy, tworząc statyczny plik .json zawierający fałszywe dane.
źródło
W tym kontekście słowo "stub" jest używane zamiast "mock", ale dla jasności i precyzji autor powinien był użyć "mock", ponieważ "mock" to rodzaj odgałęzienia, ale do testowania. Aby uniknąć dalszych nieporozumień, musimy zdefiniować, czym jest kod.
W ogólnym kontekście, kod pośredniczący to fragment programu (zwykle funkcja lub obiekt), który zawiera złożoność wywołania innego programu (zwykle znajdującego się na innej maszynie, maszynie wirtualnej lub procesie - ale nie zawsze może to być również lokalny obiekt). Ponieważ rzeczywisty program do wywołania zwykle nie znajduje się w tej samej przestrzeni pamięci, wywołanie go wymaga wielu operacji, takich jak adresowanie, wykonanie rzeczywistego zdalnego wywołania, uporządkowanie / serializacja danych / argumentów do przekazania (i to samo z potencjalnym wynikiem), może nawet zajmując się uwierzytelnianiem / bezpieczeństwem i tak dalej. Należy zauważyć, że w niektórych kontekstach kody pośredniczące są również nazywane proxy (na przykład dynamiczne proxy w Javie).
Mock to bardzo specyficzny i restrykcyjny rodzaj kodu pośredniczącego, ponieważ mock zastępuje inną funkcję lub obiekt do testowania. W praktyce często używamy mocków jako programów lokalnych (funkcji lub obiektów) w celu zastąpienia zdalnego programu w środowisku testowym. W każdym przypadku makieta może symulować rzeczywiste zachowanie zastępowanego programu w ograniczonym kontekście.
Najbardziej znane rodzaje pośredników są oczywiście przeznaczone do programowania rozproszonego, gdy trzeba wywołać procedury zdalne ( RPC ) lub obiekty zdalne ( RMI , CORBA ). Większość platform / bibliotek programowania rozproszonego automatyzuje generowanie kodów pośredniczących, dzięki czemu nie trzeba ich ręcznie pisać. Stuby mogą być generowane na podstawie definicji interfejsu, napisanej za pomocą IDL na przykład w (ale możesz także użyć dowolnego języka do definiowania interfejsów).
Zwykle w RPC, RMI, CORBA i tak dalej rozróżnia się kody pośredniczące po stronie klienta , które głównie zajmują się organizowaniem / serializacją argumentów i wykonywaniem zdalnego wywołania, oraz kody pośredniczące po stronie serwera , które głównie zajmują się cofaniem / deserializacją argumenty i faktycznie wykonaj zdalną funkcję / metodę. Oczywiście kody pośredniczące klienta znajdują się po stronie klienta, podczas gdy kody pośredniczące serwerów (często nazywane szkieletami) znajdują się po stronie serwera.
Pisanie dobrych, wydajnych i ogólnych kodów pośredniczących jest dość trudne w przypadku odwołań do obiektów. Większość rozproszonych struktur obiektowych, takich jak RMI i CORBA, obsługuje odniesienia do obiektów rozproszonych, ale jest to coś, czego większość programistów unika na przykład w środowiskach REST. Zwykle w środowiskach REST programiści JavaScript tworzą proste funkcje pośredniczące w celu hermetyzacji wywołań AJAX (serializacja obiektów jest obsługiwana przez
JSON.parse
iJSON.stringify
). Projekt Swagger Codegen zapewnia rozległą obsługę automatycznego generowania kodów pośredniczących REST w różnych językach.źródło
Stub to definicja funkcji, która ma poprawną nazwę funkcji, poprawną liczbę parametrów i daje fikcyjny wynik poprawnego typu.
Pomaga w napisaniu testu i służy jako rodzaj rusztowania umożliwiającego uruchamianie przykładów jeszcze przed zakończeniem projektowania funkcji
źródło
Masz również bardzo dobre frameworki testowe do tworzenia takiego kodu. Jednym z moich ulubionych jest Mockito Jest też EasyMock i inne ... Ale Mockito jest świetne, powinieneś to przeczytać - bardzo elegancki i potężny pakiet
źródło
To zdanie jest prawie na pewno analogią do etapu budowy domu - „zgaszenia” kanalizacji. Podczas budowy, gdy ściany są jeszcze otwarte, wykonuje się szorstką instalację wodno-kanalizacyjną. Jest to konieczne, aby budowa mogła być kontynuowana. Następnie, kiedy wszystko dookoła jest już gotowe, wraca się i dodaje krany i toalety oraz rzeczywisty produkt końcowy. (Zobacz na przykład Jak zainstalować króciec rurowy ).
Kiedy „wyrzucasz” funkcję w programowaniu, tworzysz jej wystarczająco dużo, aby obejść ją (do testowania lub pisania innego kodu). Następnie wrócisz później i zastąpisz ją pełną implementacją.
źródło
Zaślepki RPC
Źródło
źródło
„Usunięcie funkcji oznacza, że napiszesz tylko tyle, aby pokazać, że funkcja została wywołana, pozostawiając szczegóły na później, gdy będziesz mieć więcej czasu”.
Od: SAMS Naucz się C ++, Jesse Liberty i Bradley Jones
źródło