Проверьте, какой метод был вызван сам по себе, используя MOQ?

Объект, который я тестирую, будет вызывать другие методы в зависимости от чего-либо.

т.е.

class ToTest {
 public void A(MyObject o) {
  if (some_condition)
   this.B(o);
  else 
   this.C(o);
 }
 public void B(MyObject o) { ... }
 public void C(MyObject o) { ... }
}

Как я могу проверить, что метод B () был вызван?

4 голоса | спросил Stefano Altieri 21 +04002014-10-21T18:02:29+04:00312014bEurope/MoscowTue, 21 Oct 2014 18:02:29 +0400 2014, 18:02:29

2 ответа


0

Если B и C aren не виртуальный, то вы не сможете напрямую проверить эти методы с помощью Moq, так как они тесно связаны с A.

Однако вы можете косвенно проверить ветку, например, если B и C делают разные вещи для Объект o, тогда вы можете обнаружить это или, если нет, если B и C сами вызывают Mockable зависимости, например если B вызывает ILogger и C вызывает обновление ORM, после чего вы можете косвенно проверить ветвь посредством наличия косвенных взаимодействий.

В противном случае я бы предложил рефакторинг кода:

  • Сделайте B и C virtual, чтобы их можно было проверить с помощью Moq (возможно, с помощью CallBase=true, если это имеет отношение к тесту на SUT)
  • Если B и C представляют разные проблемы (в смысле SOLID), рассмотрите другие рефакторинги, например, методы B и сами C перемещены в зависимые зависимости.
ответил StuartLC 21 +04002014-10-21T18:10:07+04:00312014bEurope/MoscowTue, 21 Oct 2014 18:10:07 +0400 2014, 18:10:07
0

Ты не можешь. Вы можете проверить, были ли вызваны методы для фиктивного объекта, но сам объект moq невозможен.

Если MyObject действительно фиктивный объект, вы можете использовать:

mockObject.Verify(m => m.B(It.IsAny<Type>()), Times.Exacly(n))
ответил severin 21 +04002014-10-21T18:06:02+04:00312014bEurope/MoscowTue, 21 Oct 2014 18:06:02 +0400 2014, 18:06:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132