Правильно ли, что ноки и макеты Rhino Mocks хороши только для интерфейсов, а не для конкретных классов? Я потратил много времени, пытаясь заставить этот кусок кода работать. Я не ожидал, что stubbed pubSubClient всегда будет вызывать метод Send из класса. Этот метод имеет некоторые зависимости и исключает исключение.
[Test]
public void Test01()
{
PubSubMessage psm = new PubSubMessage();
var pubSubClient = MockRepository.GenerateStub<PubSubClient>();
pubSubClient.Stub(x => x.Send(psm)).IgnoreArguments().Return(null);
// actual PubSubClient Send method throws exception
// the rest of the test is skipped...
}
Однако, когда я извлек интерфейс и запустил тот же тест с помощью IPubSubClient, он работает как ожидалось.
Означает ли это, что мне нужно извлечь интерфейс для каждого класса, который я хочу издеваться/заглушить с Rhino? Или я чего-то не хватает, технически или концептуально?
ОБНОВЛЕНИЕ: ОК. Кажется, я выяснил, в какой части я отсутствовал: Rhino Mocks не может перехватывать вызовы не виртуальным методам. Итак, я предполагаю, что у меня есть либо используемые интерфейсы, либо каждый метод для конкретного класса виртуальный. Пожалуйста, поправьте меня, если есть другой вариант.