Rhino Mocks IgnoreArguments () и проверка правильности вызова лямбды - PullRequest
5 голосов
/ 24 февраля 2012

Вот что у меня есть:

   public interface IDataCenterMsmqWriter
   {
      void UpdateData(Action<DataCenterWcfProxy> action);
   }

Тестируемая система:

public class WcfService : IWcfService
{
    private readonly IDataCenterMsmqWriter _writer;

    public WcfService(IDataCenterMsmqWriter writer)
    {
        _writer = writer;
    }

    #region IWcfService members

    public void SendData(SomeData data)
    {
        _writer.UpdateData(d => d.SendVarData(data));
    }

    // other members of IWcfService elided
    #endregion
}

Как мне протестировать с помощью Rhino Mocks, установив _writer как Mock, и проверить, было ли вызвано правильное действие в методе UpdateData.

Я пробовал это:

// _writer is setup as a mock
var data = new SomeData();
_wcfServiceSUT.SendData(data);
_writer.AssertWasCalled(d => d.UpdateData(x => x.SendVarData(data));

не работает.

Я могу добавить:

, p => p.IgnoreArguments () после UpdateData внутри AssertWasCalled, но это не дает мне того, что я хочу, чтобы убедиться, что SendVarData вызывался с переменной data.

Я смотрел на это:

Как утверждать, что действие называлось

но мое Действие не дразнит, как mockDialogService в его примере.

Есть ли способ проверить правильность вызова Action или Func с правильными входными параметрами и т. Д.?

Ответы [ 2 ]

1 голос
/ 27 сентября 2012

Лучший способ проверить, что Action или Func был вызван с правильными параметрами, - это использовать расширение .WhenCalled .Пример можно найти в следующем обсуждении групп Google .

В этом примере показано, как использовать результат Ожидаемый и Фактический вместо ожидаемых ожиданий или нет .

1 голос
/ 07 марта 2012

UpdateData должен быть виртуальным, в противном случае макет носорога не может перезаписать метод

...