Смысл виртуальных членов в Moq

Для модульного тестирования я использую NUnit 2.6 и Moq 4.0. Там есть частный случай, касающийся виртуальных членов, где объекты прокси-объекта Moq не передают вызовы методов на фактическую реализацию (возможно, по дизайну). Например, если у меня был класс...

public class MyClass {
    protected virtual void A() {
        /* ... */
    }

    protected virtual void B(...) {
        /* ... */
    }
}

... и я использую Moq для переопределения метода GetSomethingElse A() в моем тестовом устройстве...

var mock = new Mock<MyClass>();
mock.Protected().Setup("A").Callback(SomeSortOfCallback);

... использование метода mock A работает великолепно; однако, если что-либо в указанном методе вызовет не-издевавшийся метод B, метод ничего не сделает и не вернет значения по умолчанию, даже если фактическая реализация существует в MyClass.

Есть ли способ обойти это? Я неправильно использую Moq?

Спасибо заранее,
Мэнни

Ответ 1

Установите mock.CallBase = true, и вам должно быть хорошо идти.

Ответ 2

 var systemUnderTest = new Moq.Mock<ProcessBulkData> { CallBase = true };
 systemUnderTest.Setup(s => s.MethodName(...)).Returns(...);
 var actual=systemUnderTest.Object.BulkInsert(...);