Как смоделировать свободный интерфейс с Rhino mock - PullRequest
0 голосов
/ 30 ноября 2011

Ниже представлен свободный интерфейс:

public interface IReporter<in T,out TResult>
{
    IReporter<T, TResult> Add(T seed);
    TResult Prepare();
}

Использование в коде как:

string errorReport = ErrorReporter.Add (исключение).Prepare ();

Контрольный пример теста:

        With.Mocks(mockRepository)
            .Expecting(() =>
                           {
                               Expect.Call(errorReporter.Add(null)).IgnoreArguments();
                               Expect.Call(errorReporter.Prepare()).Return(string.Empty);
                               Expect.Call(notifier.Notify(null)).IgnoreArguments().Return(true);
                           })
            .Verify(() =>
                        {
                            ITransporter transporter = new Transporter
                            {
                                ExpectedArgsLength = 1,
                                Notifiers = notifiers,
                                ErrorReporter = errorReporter
                            };
                            transporter.Run(new string[] { });
                        });

Ошибка:

Rhino.Mocks.Exceptions.ExpectationViolationException: IReporter`2.Prepare ();Ожидаемый # 1, фактический # 0.

Если я прокомментирую Expect.Call (errorReporter.Prepare ()). Return (string.Empty);тогда это работает, что не имеет смысла для меня.

Я что-то упустил?Пожалуйста, помогите!

1 Ответ

1 голос
/ 30 ноября 2011
Expect.Call(errorReporter.Add(null)).IgnoreArguments().Return(errorReporter);

вам нужно указать фиктивному объекту вернуть объект, который вы ожидаете от вызова Add, чтобы связать эти вызовы вместе.честно говоря, я удивлен, что это не дает сбоя с исключением nullreference, когда Add возвращает null, а Prepare вызывается по нулевой ссылке.

...