Проверка методов, вызываемых с помощью Moq - PullRequest
0 голосов
/ 14 сентября 2011

Попытка убедиться, что метод вызывается в макете, но, похоже, не может понять, почему я продолжаю получать исключение, что он не вызывается. Рассматриваемый метод выглядит следующим образом:

public class CustomerSyncEngine {
public CustomerSyncEngine(ILoggingProvider loggingProvider, ICrmProvider crmProvider, ICacheProvider cacheProvider) {
  Logger = loggingProvider;
  CrmProvider = crmProvider;
  CacheProvider = cacheProvider;
}
public virtual void SyncPickLists() {
  Logger.LogBeginPicklistSync();

  // get all the pick lists from the local cache
  var localCachePickLists = CacheProvider.GetPickLists().ToList();
  // get all the pick lists from the remote system
  var crmPickLists = CrmProvider.GetPickLists().ToList();

  // build a sync plan
  var changes = BuildPickListUpdatePlan(localCachePickLists, crmPickLists).ToList();

  // run the sync
  RunPickListSync(changes);

  Logger.LogEndPicklistSync();
}
}

Я тогда написал такой тест:

[TestMethod]
public void TestSyncPickLists() {
  // arrange
  var mockCrm = new Mock<ICrmProvider>();
  mockCrm.Verify(x => x.GetPickLists(), Times.Once(), "ICrmProvider.GetPickLists not called");

  var mockCache = Mock.Of<ICacheProvider>();
  var mockLogger = Mock.Of<ILoggingProvider>();

  // act
  var syncEngine = new CustomerSyncEngine(mockLogger, mockCrm.Object, mockCache);
  syncEngine.SyncPickLists();

  // assert
  mockCrm.VerifyAll();
}

Когда я запускаю его, тест завершается с сообщением, которое я указал в Verify (). Поэтому я установил несколько точек останова и увидел, что тест никогда не вызывает метод syncEngine.SyncPickLists (), который меня смущает. Поэтому я закомментировал два оператора Verify () и VerifyAll (), и теперь я вижу, что все вызывается правильно. Что мне здесь не хватает? Похоже, я делаю именно то, что показано в Quickstart , а также в этой теме .

1 Ответ

0 голосов
/ 14 сентября 2011

Ответ, опубликованный Tejs в комментарии к исходному сообщению.

Вы вызываете Verify после вызова SyncPickLists - это не отсроченная вещь, поскольку она проверяет значение тут и там. Переместите строку ниже вашего вызова в SyncPickLists, и вы должны пройти. - Тейс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...