Как установить сеттеры на классы, которые не имеют парных геттеров? - PullRequest
1 голос
/ 10 января 2011

Я пишу модульные тесты для классов, свойства которых имеют сеттеры, но не имеют геттеров .

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

Я нахожу свои варианты:

  • напишите геттеры для этих функций, чтобы я мог проверить, правильно ли они установлены
  • написать метод, такой как testAllSetters(), который проверяет их все одновременно

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

  • Я также мог бы проверить вывод класса, чтобы убедиться, что он в целом корректен, но во многих случаях это не проверяет отдельные сеттеры, как хотелось бы

Как лучше всего использовать установщики юнит-тестов для классов, в которых нет парных геттеров?

Ответы [ 3 ]

2 голосов
/ 10 января 2011

Проблема в том, что вы не хотите менять свой API для своих модульных тестов. Начните смотреть на свои юнит-тесты как на другого пользователя / потребителя вашего API. Как и разработчики, использующие эту библиотеку, модульные тесты предъявляют свои собственные требования. Когда вы увидите, что ваши модульные тесты являются потребителями вашего API, найдется пользователь, который использует эти геттеры, и он оправдает их.

Если невозможно изменить ваш API (например, если вы разрабатываете фреймворк многократного использования), сделайте API модульного тестирования внутренним и используйте InternalsVisibleToAttribute, чтобы позволить вашей библиотеке тестирования получить доступ к внутренним методам вашего кода.

Оставляя в стороне модульные тесты, вы все равно можете подумать о том, чтобы получить эти свойства с геттерами, потому что наличие свойств без геттеров очень не интуитивно понятно разработчикам. В Руководстве по проектированию рамок даже есть правило против этого:

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

Вы также можете принять это во внимание.

Удачи.

1 голос
/ 10 января 2011

Вы можете использовать PrivateObject , чтобы проверить правильность обновления приватных членов после вызова сеттера

0 голосов
/ 10 января 2011

Есть ли у сеттеров логика?

Да: либо откройте геттер. Java: защищен и имеет модульный тест в одном пакете. C #: InternalsVisibleToAttribute.

Нет: не устанавливайте сеттеры напрямую. Нет смысла. Проверьте методы, которые используют данные, установленные установщиками.

...