Мок основные вопросы - PullRequest
1 голос
/ 25 мая 2010

Я сделал следующий тест для моего класса:

var mock = new Mock<IRandomNumberGenerator>();
mock.Setup(framework => framework.Generate(0, 50))
    .Returns(7.0);

var rnac = new RandomNumberAverageCounter(mock.Object, 1, 100);
rnac.Run();
double result = rnac.GetAverage();
Assert.AreEqual(result, 7.0, 0.1);

Проблема была в том, что я передумал, какой диапазон значений Generate(int min, int max) будет использовать. Так что в Mock.Setup() я определил диапазон как 0 to 50, а позже я фактически вызвал метод Generate() с диапазоном 1 to 100.

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

Кроме того, если я захочу запустить этот метод Generate () 10 раз с разными значениями (скажем, от 1 до 10), придется ли мне делать 10 фиктивных установок или что-то в этом роде или есть специальный метод для него? Лучшее, что я мог придумать, - это (что неплохо, я просто спрашиваю, есть ли другой лучший способ):

for (int i = 1; i < 10; ++i) {
    mock.Setup(framework => framework.Generate(1, 100))
        .Returns((double)i);
}

1 Ответ

0 голосов
/ 16 июня 2010

Вы смотрели на Moq QuickStart ? Я подозреваю, что вам нужен механизм It.IsAny и / или одна из перегрузок Returns, при которой вы предоставляете лямбда-метод, который вызывается обратно для генерации и / или сопоставления / проверки параметров в проверяемом методе.

...