2013-12-13 6 views
2

У меня есть интерфейс ILogger, который имеет свойство LocalTime, на которое можно было бы добавить время с AddToTime. Для того, чтобы дразнить его соответствующим образом, я попытался следующие:Как сохранить значение, чтобы вернуть его позже?

int ltime = 0; 
var mlog = new Mock<ILogger>(); 
mlog.Setup(l => l.AddToTime(It.IsAny<int>())).Callback((int s) => {ltime +=s;}); 
mlog.Setup(l => l.LocalTime).Returns(ltime); 

Хотя он компилирует, я не работает: Наверное, потому, что Returns оценивает выражение ltime в начале и так всегда возвращает 0. Любые предложения о том, как можно добиться отступов?

Edit: мне это нужно, чтобы проверить его с петлей вида:

while (log.LocalTime < 1000) 
     { 
      log.AddToTime(500); 
      .... 
     } 

Как я использую время для целей лесозаготовок, он не может просто заменить петлю с локальным переменным. Если AddToTime ничего не делает, цикл не может быть правильно протестирован.

+0

Показать нам «действовать» –

+0

Почему бы не сделать это окурок? Я не помню правильную документацию о том, как настроить заглушку в Moq, но я знаю, что вы можете это сделать. Вы пробовали этот подход? –

+0

Итак, у вас есть жестко закодированные 1000 и 500 в вашем SUT? И можете ли вы описать требования к этому коду? Также вы можете изменить «Logger» или нет? –

ответ

4

Это тест, я предлагаю вам избегать любой логики в вашем тесте. Только место, где у вас должна быть какая-то логика, вы тестируете SUT. В противном случае реализация издевающегося логгера пробирается в тест другого класса. Просто значение настройки вы ожидаете:

int ltime = 0; 
int timeToAdd = 2; 
var mlog = new Mock<ILogger>(); 
mlog.Setup(l => l.AddToTime(timeToAdd)); 
mlog.Setup(l => l.LocalTime).Returns(ltime + timeToAdd); 

Я бы даже попытаться избежать расчета установки возвращения последнего и заменить его постоянным ожидаемое значение. Но мне нужно больше узнать о логике, которую вы тестируете.

+0

Интерфейс используется в цикле, который выходит после достижения предельного срока. Поэтому установка постоянных значений приводит к бесконечному циклу или не вызову вообще. Кроме того, мне нужно что-то, что возвращает низкий LocalTime при первом вызове, и высокое значение для любого последующего вызова. –

+0

@JFMeier Вы можете показать, что тестируете? –

Смежные вопросы