Как проверить, был ли вызван закрытый метод с ожидаемым аргументом в модульном тесте? - PullRequest
3 голосов
/ 15 июля 2009

Я пишу модуль для класса, который выглядит следующим образом, используя nunit и Rhino mock.

Class MyClass
{
  private void M()
  {
    N("Hi");
  }

  private void N(string text)
  {
    ........ do something
  }
}

Для модульного теста для метода M я хочу проверить, был ли вызван метод N с аргументом "Hi". Как мне это сделать?

Ответы [ 4 ]

10 голосов
/ 15 июля 2009

Мне кажется, что с точки зрения тестирования вы углубляетесь в детали реализации вашего объекта. Разве вы не можете выполнить свои тесты, проверив окончательный результат вашего вызова метода? То есть предположительно эти вызовы методов имеют некоторый эффект. Поэтому вместо проверки передаваемых аргументов вам следует проверять конечный результат.

Таким образом, вы можете изменить базовый код позднее, и ваши модульные тесты подтвердят, что конечный результат будет таким же, независимо от вашей реализации.

2 голосов
/ 15 июля 2009

+ 1 к ответу Брайана.

Альтернативой является разделение "N" на другой класс, а затем использование в тесте экземпляра этого класса Затем вы можете настроить макет для ожидания вызова с определенным параметром. Но, на самом деле, было бы неуместно выделять это. Зависит от вашего точного сценария.

1 голос
/ 15 июля 2009

Используйте насмешку над вашим методом N ().

http://www.mockobjects.com/

Однако решение Брайана лучше - думаю, это хорошее направление для хорошего модульного тестирования.

0 голосов
/ 01 марта 2010

Следующий код может помочь вам.

var mock = new Mock<IFoo>();
bool called=false;
string test=string.empty; 
mock.Setup(foo => foo.Execute(It.IsAny<string>())).Callback((string s) => { test = s; called = true;});
Assert.IsTrue(called, "Execute() was not called");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...