Правильно ли, что заглушки и макеты Rhino Mocks хороши только для интерфейсов, а не для конкретных классов? Я потратил довольно много времени, пытаясь заставить этот кусок кода работать. Я не ожидал, что заглушка 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 не может перехватывать вызовы не виртуальных методов . Итак, я думаю, что я либо использую интерфейсы, либо делаю каждый метод в конкретном классе виртуальным. Пожалуйста, поправьте меня, если есть другой вариант.