2015-07-03 4 views
2

Я использую Nunit тестирование с Rhino-Mocks для тестирования кода.
Мой код похож на нижеследующий;C# Значение возвращаемого значения метода mock при фактическом выполнении

_mockHandler.Expect(m => m.DoSomething(Arg<string>.Is.Anything, Arg<string>.Is.Anything)) 
      .Return(myList["XXX"]); 

Содержание myList обновляется с нитью. Как только указанное выше значение строки myList["XXX"] пуст. Но во время этого метода вызывать из кода myList["XXX"] имеет значение.

Есть ли способ настроить, обратитесь к фактическому значению при вызове метода?

ответ

3

Способ вернуть значение во время выполнения вместо времени записи - использовать методы WhenCalled или Do.

В вашем случае, кажется, что Do является правильным решением: (Если вы хотите знать, когда использовать Do или WhenCalled чтение my answer)

_mockHandler.Expect(m => m.DoSomething(Arg<string>.Is.Anything, 
             Arg<string>.Is.Anything)) 
      .Do(new Func<string,string,string>((s, s1) => myList["XXX"])); 

В приведенном выше примере (s, s1) => myList["XXX"]) будет выполняться при вызове DoSomething и значение в myList["XXX"] вернется.

+1

Согласитесь, что 'Do()' является правильным способом для этого. Однако я не думал, что последний «Return()» был необходим. –

+0

Спасибо @AdamPrescott. Я запутался с 'WhenCalled' ... –