2011-09-26 18 views
11

Jestem oczywiście zdezorientowany - jest to zadanie, które osiągnąłem w kilku innych frameworkach, które rozważamy (NMock, Moq, FakeItEasy). Mam wywołanie funkcji, które chciałbym wywołać. Wywołanie funkcji ma parametr out (obiekt).Parametry wyjściowe z RhinoMocks

Wywołanie funkcji jest w przypadku użycia, które jest wywoływane wiele razy w ramach kodu. Kod wywołujący podaje parametry, w tym obiekt NULL dla parametru out. Chciałbym ustawić oczekiwany parametr OUT, w oparciu o inne dostarczone parametry.

Jak określić oczekiwany parametr INBOUND na wartość NULL, i oczekiwany parametr OUTBOUND dla obiektu wypełniony zgodnie z oczekiwaniami? Wypróbowałem sześć sposobów na niedzielę i jak do tej pory nie udało mi się uzyskać nic więcej poza NULL dla mojego parametru OUTBOUND out.

Odpowiedz

20

Od http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#OutandRefarguments:

ref i out argumenty są wyjątkowe, ponieważ trzeba także dokonać kompilator szczęśliwy. Słowa kluczowe ref i out są obowiązkowe i potrzebujesz jako argumentu. Arg nie zawiedzie:

User user; 
if (stubUserRepository.TryGetValue("Ayende", out user)) 
{ 
    //... 
} 
stubUserRepository.Stub(x => 
    x.TryGetValue(
    Arg.Is("Ayende"), 
    out Arg<User>.Out(new User()).Dummy)) 
    .Return(true); 

out jest mandantorem dla kompilatora. Arg.Out (new User()) jest ważną częścią dla nas, określa, że ​​out argument powinien zwrócić nowego użytkownika(). Dummy to po prostu pole określonego typu Użytkownik, , aby kompilator był szczęśliwy.

+0

Nie działa to w przypadku nosków 3,6 choć ... –

+0

Łącze teraz otrzymuje 404 Nie znaleziono. – jakejgordon

6

W przypadku korzystania repozytorium wygenerować Mock/odgałęzienie

checkUser = MockRepository.GenerateMock<ICheckUser> 

można skonfigurować oczekiwanie z zewnątrz parametru

checkUser 
.Expect(c => c.TryGetValue(Arg.Is("Ayende"), out Arg<User>.Out(new User()).Dummy) 
.Return(true) 
+1

Nie działa to w przypadku wersji 3.6 systemu rhino ... –

4

To rozwiązanie jest czystsze i współpracuje z Rhino Mocks 3.6:

myStub.Stub(x => x.TryGet("Key", out myValue)) 
     .OutRef("value for the out param") 
     .Return(true);