Ответ 1
Установите mock.CallBase = true
, и вам должно быть хорошо идти.
Для модульного тестирования я использую 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?
Спасибо заранее,
Мэнни
Установите mock.CallBase = true
, и вам должно быть хорошо идти.
var systemUnderTest = new Moq.Mock<ProcessBulkData> { CallBase = true };
systemUnderTest.Setup(s => s.MethodName(...)).Returns(...);
var actual=systemUnderTest.Object.BulkInsert(...);