Это мой тестMoq: Верификация защищенный метод на абстрактный класс называется
[TestClass]
public class RepositoryTests
{
private APurchaseOrderRepository _repository;
[TestInitialize]
public void TestInitialize()
{
_repository = new FakePurchaseOrderRepository();
}
[TestMethod]
public void RepositoryGetPurchaseOrdersForStoreCallsValidatePurchaseOrders()
{
var store = new Store();
var mockRepo = new Mock<APurchaseOrderRepository>();
mockRepo.Protected().Setup("ValidatePurchaseOrders", ItExpr.IsAny<List<PurchaseOrder>>());
_repository.GetPurchaseOrders(store);
mockRepo.Protected().Verify("ValidatePurchaseOrders", Times.Once(), ItExpr.IsAny<List<PurchaseOrder>>());
}
}
APurchaseOrderRepository и его интерфейс похож на этот
public interface IPurchaseOrderRepository
{
List<PurchaseOrder> GetPurchaseOrders(Store store);
}
public abstract class APurchaseOrderRepository : IPurchaseOrderRepository
{
public abstract List<PurchaseOrder> GetPurchaseOrders(Store store);
protected virtual bool ValidatePurchaseOrders(List<PurchaseOrder> purchaseOrders)
{
return true;
}
}
И мой Поддельный
public class FakePurchaseOrderRepository : APurchaseOrderRepository
{
public override List<PurchaseOrder> GetPurchaseOrders(Store store)
{
var purchaseOrders = new List<PurchaseOrder>();
ValidatePurchaseOrders(purchaseOrders);
return purchaseOrders;
}
}
Однако, мой тест не выполнен:
метод испытания PreSwapTests.RepositoryTests.RepositoryGetPurchaseOrdersForStoreCallsValidatePurchaseOrders бросили исключение: Moq.MockException: Ожидаемое вызов на макете один раз, но был 0 раз: макет => mock.ValidatePurchaseOrders (It.IsAny())
Конфигурированные настройки: mock => mock.ValidatePurchaseOrders (It.IsAny()), Times.Never Нет выполненных вызовов.
Что я делаю неправильно?
Примечания:
- Moq.4.0.10827
Update:
Я думаю, что эта линия mockRepo.Protected().Setup("ValidatePurchaseOrders");
, потому что мне нужно, чтобы добавить параметры к нему в качестве второго аргумента , но я не могу понять это правильно.
Обновление 2: Произведено несколько изменений, теперь оно скомпилировано, но не учитывается правильно ... или что-то, сообщение об ошибке и код оба обновлены выше.
Изменено на 'private APurchaseOrderRepository _repository;', такая же ошибка – CaffGeek
Ах, это потому, что это защищенный член. Либо сделайте это общедоступным, либо этот вопрос может помочь: http://stackoverflow.com/questions/3883835/verify-that-a-base-protected-method-is-called-with-moq-3-1 –
Я думаю, что это это строка mockRepo.Protected(). Setup («ValidatePurchaseOrders»); потому что мне нужно добавить в нее параметры как второй аргумент, но я не могу понять, что это правильно. – CaffGeek