Вы можете заглушить только виртуальные методы с Rhino Mocks.Поэтому убедитесь, что ваш метод GetChild является виртуальным, в остальном ваш Expect.Call( parent.GetChild( null ) ).Return( child );
не имеет смысла для не виртуального метода.Вы не можете определить ожидания для не виртуальных участников.
Поэтому попробуйте объявить метод как виртуальный:
public virtual Child GetChild(ChildIdentifier identifier)
Кроме того, синтаксис Record / Playback в Rhino Mocks, который вы используете в своем примере, устарел в пользу AAAсинтаксис (на самом деле это устаревание произошло еще в 2008 году, когда был введен синтаксис AAA).
Также ваш модульный тест сложен для понимания.Что именно вы здесь тестируете?Метод, который вы пытаетесь использовать для модульного тестирования, - это метод, для которого вы определяете ожидания - GetChild
.Это странно, а не как насмешка предназначена для использования.Вы имитируете только те зависимости, на которые опирается тестируемый метод.Вы определяете ожидания для этих зависимостей, чтобы управлять потоком тестируемого метода и утверждать различные сценарии.
ОБНОВЛЕНИЕ:
Вместо:
var order = MockRepository.Stub<Order>();
вы должны использовать:
var order = MockRepository.PartialMock<Order>();
для создания экземпляра тестируемого субъекта.
Если вы используете метод Stub
, то фактический метод, который вы пытаетесь выполнить модульным тестом здесь (order.GetAllocation
) никогда не будет поражен.