Тип возврата по умолчанию для Rhino Mocks? - PullRequest
1 голос
/ 06 января 2012

Почему Rhino Mocks (v3.6) генерирует тип прокси, если типом возврата является интерфейс, если вы не явно указываете возвращаемое значение (я знаю, что вы всегда должны указывать возвращаемое значение) , но это другой вопрос)?

Множество веб-статей и даже некоторые сообщения SO RhinoMock: Mocks Vs StrictMocks Vs DynamicMocks , скажем, что mock вернет тип по умолчанию в качестве результата, я бы предположил default(T). Я не вижу такого поведения (см. Ниже). В документации Rhino Mocks я не могу найти ничего, что бы указывало на поведение.

Я также тестировал (аналогично приведенному ниже) с целочисленными типами и классом в качестве возвращаемых типов, и оба эти теста выдают исключение "требуется возвращаемое значение или исключение для выброса" , когда я пытаюсь вызвать метод, в моем коде акта. Я не возражаю, это очевидно, что не так, и Rhino не «проявляет креативность», хотя это непостоянно.

// Arrange
IFoo strictMockInstance = MockRepository.GenerateStrictMock<IFoo>();
IFoo dynamicMockInstance = MockRepository.GenerateMock<IFoo>();

strictMockInstance.Expect(call => call.Bar());
strictMockInstance.Replay();

dynamicMockInstance.Expect(call => call.Bar());
dynamicMockInstance.Replay();

// Act
IResult smResult = strictMockInstance.Bar();
IResult dmResult = dynamicMockInstance.Bar();

// Assert    
Assert.IsNull(smResult); // none of these results are null, both are proxy instances
Assert.IsNull(dmResult);

// ....
public interface IFoo 
{
    IResult Bar();
}

public interface IResult { }

1 Ответ

0 голосов
/ 16 мая 2014

Основная причина этой функциональности заключается в поддержке (или обработке) иерархий

Примите во внимание следующее:

var mock = MockRepository.GenerateMock<ISomeInterface>();
mock.Expect(x => x.Document.Header.CreateRow());

Когда Rhino Mocks сталкивается с типом возврата, который является интерфейсом, он будетпроверьте, не создан ли макет.Если он не найдет его, он создаст его на лету, чтобы предотвратить нулевые исключения

...