Należy pamiętać, że Rhino nie jest już rozwijany . Nowe ramy upuścić tę różnicę mock-skrótowe całkowicie i wprowadzić jednolity czas na test podwaja:
Ewolucja mocy King frameworki wydają się przesuwać w kierunku "jednego ogólnego celu", zamiast mieć oddzielne różne w zależności od kontekstu przypadku testu.
Aby dowiedzieć się więcej na temat, że separacja (mock, Pniak, fałszywe) pochodzi i jakich celów służył, sugeruję czytanie Mark Seemann's artykuł o continuum of test doubles:
Na jednym biegunie znajdziesz manekiny z absolutnie brak implementacji, a na drugim końcu są pełne wdrożenia produkcyjne.Manekiny i implementacje produkcyjne są dobrze zdefiniowane, ale trudniejsze do zidentyfikowania są: stubsy, szpiedzy i podróbki: kiedy szpieg testowy staje się fałszywy? Ponadto, mumy zamieszkują dość dużą przerwę w kontinuum, ponieważ w niektórych przypadkach mogą być dość złożone, ale w innych bardzo proste.
Mogłoby się wydawać, że Rhino nie rozróżnia makiety i odgałęzienie, ale istnieją subtelne różnice. Na przykład: użyj elementu pobierającego właściwość stubring:
var mock = MockRepository.GenerateMock<IService>();
mock.Stub(m => m.Property).Return(42);
Tak właśnie musisz to zrobić, gdy obiekt jest sztuczny. Stub drugiej strony, wprowadza semantykę własności, które trywializowania całą rzecz:
var stub = MockRepository.GenerateStub<IService>();
stub.Property = 42;
Mimo że jest jedynym, który przychodzi mi do głowy w tej chwili, nie może być trochę więcej. Ale nadal są to drobne niuanse.
1: Zgodnie z 05/19/2013, to nie może już uznać za prawdziwe: Rhino Mocks new home
To pojęcie odgałęzienie kontra mock, ale jak już mówiłem w pytaniu, można użyć makiety jako stub z Rhino. Więc wracając do mojego pytania, jaka korzyść wynika z posiadania dwóch oddzielnych obiektów? Co tracimy, używając zawsze MockRepository.GenerateMock()? –
Tak, * możesz * używać makiety jako kodu pośredniczącego. Jednak, jak wspomniano powyżej, jeśli nie chcesz, aby Twoja próbka wpłynęła na wynik testu, użyj kodu pośredniczącego. –
Czy możesz wyjaśnić, dlaczego? Co powiesz na pokazanie jakiegoś kodu, który udowodni Twoją argumentację? –