Разработка тестируемого кода с интерфейсами и закрытыми методами - PullRequest
1 голос
/ 10 ноября 2011

Итак, у меня есть модель представления, которая использует экземпляр IAdapter, верно?И когда я устанавливаю свойство в модели представления, я вызываю некоторый метод в этом IAdapter.Это я могу легко moq & test, и я делаю.Вот метод испытания.

 [TestMethod]
public void Setting_ExchangePrice_Calls_UpdateExcahngeCosts()
{
  var currentItem = new InventoryItem();
  bool adapterUpdateExchangeCostsWasCalled = false;
  adapterMock.Setup(x => x.CurrentItem).Returns(currentItem);
  adapterMock.Setup(x => x.UpdateExchangeCosts()).Callback(() => adapterUpdateExchangeCostsWasCalled = true);
  vm.Adapter = adapterMock.Object;
  vm.ExchangePrice = 4;
  Assert.IsTrue(adapterUpdateExchangeCostsWasCalled);
}

Вот проблема, UpdateExchangeCosts () должен вызвать UpdateExchangePrices () - они оба будут жить в конкретном экземпляре адаптера, поэтому нет никаких причин делать его общедоступным, что означает, что нетнет никакой причины определять его в интерфейсе, потому что мы не определяем частные методы в интерфейсах.Оооочень ..... Я застрял в том, как я проверяю, чтобы убедиться, что вызов UpdateExchangeCosts () также вызывает UpdateExchangePrices?Я мог бы представить тест на основе состояния, но во многих случаях UpdateExchangePrices не будет ничего обновлять (по разным причинам), поэтому не будет никакого измененного состояния для тестирования.

Спасибо и хорошего дня!

1 Ответ

1 голос
/ 10 ноября 2011

Если UpdateExchangeCosts необходимо вызвать UpdateExchangePrices, вы должны проверить это при тестировании определенных классов Adapter. При тестировании того, что vm, ему не нужно заботиться (и не должно заботиться) о том, что делает его Adapter.

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