Можно ли обучить Rhinomocks для произвольного ввода? - PullRequest
2 голосов
/ 27 сентября 2011

Я пытаюсь настроить модульный тест для фрагмента кода, который использует корректор орфографии.У меня правильно введен код зависимости, так что настройка заглушки в Rhinomocks не проблема, но блок текста, который я создал для теста, имеет хорошие 50 слов, и я бы действительно не хотел иметь 50 строк кода, которыевыглядеть примерно так:

spellingCorrector.Stub(x => x.CorrectWord("the")).Return("the");
spellingCorrector.Stub(x => x.CorrectWord("boy")).Return("boy");
spellingCorrector.Stub(x => x.CorrectWord("ran")).Return("ran");

Для целей моих модульных тестов я думаю, что предположить, что слова написаны правильно, это нормально.Есть ли способ заставить Rhinomocks просто следовать правилу о возвращении, что-то с эффектом:

spellingCorrector.Stub(x => x.CorrectWord(y)).Return(y);

Ответы [ 3 ]

3 голосов
/ 27 сентября 2011

Вы можете использовать метод IgnoreArguments():

spellingCorrector
    .Stub(x => x.CorrectWord(null))
    .IgnoreArguments()
    .Return(y);

Таким образом, независимо от того, какое значение передается методу CorrectWord, он вернет y.


UPDATE:

После вашего комментария становится понятнее:

Func<string, string> captureArg = arg => arg;
spellingCorrector.Stub(x => x.CorrectWord(null)).IgnoreArguments().Do(captureArg);

Это будет использовать любое значение, переданное в качестве аргумента, в качестве возвращаемого значения. Адаптируйте делегат captureArg, если вам нужно выполнить некоторые преобразования для этого возвращаемого значения.

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

Если вы не особо привязаны к Rhinomock, вы можете использовать Moq :

spellingCorrector.Setup(x => x.CorrectWord(It.IsAny<string>()))
    .Returns(x => x);
0 голосов
/ 27 сентября 2011

Для чего-нибудь такого сложного, вместо использования RhinoMocks, напишите свой собственный маленький класс заглушки.Я бы подкрепил его словарем всех слов, которые нужно исправить, и вернул бы слово, если его нет в словаре.Если использовать макеты не так просто (или, что более важно, более читабельно), просто напишите код.

...