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
i JSON.stringify
). Projekt Swagger Codegen zapewnia rozległą obsługę automatycznego generowania kodów pośredniczących REST w różnych językach.