Должен ли я проверить функцию публичного класса, которая изменяет только внутреннее состояние объекта? - PullRequest
1 голос
/ 07 июля 2010

Я решил добавить модульные тесты к существующему проекту (довольно большой). Я использую "Google Toolbox для Mac" для различных типов STAssert ... и OCMock Framework.

Но я думаю, что я тестирую неправильно. Например, у меня есть открытая функция saveData , которая ничего не возвращает и только изменяет внутреннее состояние объекта. Должен ли я проверить это? Из-за принципа инкапсуляции - мне не нужно сильно беспокоиться о реализации объекта и я не должен зависеть от приватных переменных (потому что они могут измениться / быть удалены в будущем)

@implementation Foo
-(void) saveData {
 internalData_ = 88;
}

В реальном проекте эта функция saveData имеет длину 100 строк и меняет множество приватных переменных класса.

Итак, я должен это проверить или нет? У меня есть небольшой опыт работы с юнит-тестированием, и я не могу принять решение самостоятельно.

1 Ответ

3 голосов
/ 07 июля 2010

Влияет ли измененное внутреннее состояние на последующие вызовы этого объекта? Если это так, вы должны включить его в модульный тест, как

  • Test a ()
  • Сохранить saveData ()
  • Снова протестируйте ()

Даже если это не так, было бы неплохо провести его модульное тестирование. Не для определения того, будет ли другой код поврежден с помощью этого метода, но для автоматического тестирования правильной реализации метода. Несмотря на то, что метод ничего не возвращает, у него, вероятно, все еще есть какой-то контракт («Если я его вызываю, это должно произойти»), и вы должны проверить, произошло ли то, что должно было произойти (например, строка, добавленная в журнал файл или что-то).

Теперь, как проверить, что если метод ничего не возвращает, это совсем другой вопрос. Как ни странно, это подробности реализации модульного теста .

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