Макетирование параметра в методе обратного вызова - PullRequest
4 голосов
/ 15 июня 2011

Итак, у меня есть метод с такой подписью:

IList<Mail> FindFilteredPaged(
   QueryFilter filter, 
   int pageIndex, 
   int pageSize, 
   out int totalRecords);

, и я хочу настроить ожидание, чтобы я мог проверить, что параметр filter равен нулю.Проблема приходит с окончательным out паромером.Моя текущая установка ожидания такова:

Expect
   .Call(registryMailService.FindFilteredPaged(
      Arg<QueryFilter<IncomingMail>>.Is.Anything,
      Arg<Int32>.Is.Anything,
      Arg<Int32>.Is.Anything,
      out Arg<Int32>.Out(20).Dummy))                         
   .Callback<QueryFilter<IncomingMail>, Int32, Int32>((p1, p2, p3) => 
   {
       filterWasNotSpecified = p1 == null;
   });

Не повезло, однако.Сбой установки с исключением: 1009 *.Любое предложение о том, как это сделать?Есть ли способ просто использовать первый аргумент и пропустить остальные?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 17 июня 2011

Вы можете столкнуться со следующим:

"Лямбда-выражение не может напрямую захватить параметр ref или out из метода вложения."

http://msdn.microsoft.com/en-us/library/bb397687.aspx

Изменить: Вы можете создать / использовать пользовательский делегат ... например, объявить ...

public delegate void SomeAction<T1, T2, T3>( out T1 a, ref T2 b, T3 c );

, затем в вашем тесте ...

SomeAction<int, string, string> fakeDoSomething  = ( out int outParam, ref string refParam, string param ) =>
            {
                outParam = 123;
                refParam = "123";
            };

        using ( m_Mocks.Record() )
        {
            Expect.Call( () => m_MockService.DoSomething( out outInt, ref refString, someString ) ).Do( fakeDoSomething );
        }
0 голосов
/ 15 июня 2011

Используйте дополнительные параметры, доступные в c #

...