Существует ли платформа модульного тестирования Java, которая автоматически тестирует геттеры и сеттеры?[закрыто]

StackOverflow https://stackoverflow.com/questions/108692

  •  01-07-2019
  •  | 
  •  

Вопрос

В Java (и, я уверен, в других сообществах) ведутся хорошо известные дебаты о том, следует ли тестировать тривиальные методы получения / установки.Обычно это касается покрытия кода.Давайте договоримся, что это открытая дискуссия, и не будем пытаться ответить на нее здесь.

Было несколько сообщений в блоге об использовании Java reflection для автоматического тестирования таких методов.

Делает ли какой-либо фреймворк (напримерJUnit) предоставляет такую функцию?например ,Аннотация, в которой говорится: "этот тест T должен автоматически протестировать все геттеры / установщики в классе C, потому что я утверждаю, что они являются стандартными".

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

Это было полезно?

Решение

Единицы измерения делает ли это со статическим методом assertRefEquals.

Другие советы

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

Я сомневаюсь, что автотестирование геттеров и сеттеров принесет пользу качеству вашего кода или вашему охвату:Либо эти методы используются из другого кода (и тестируются там, напримерпокрыт на 100%) или вообще не используется (и может быть удален).В конце концов, вы оставите геттеры и сеттеры включенными, потому что они используются в тесте, но нигде больше в приложении.

Написать такой тест должно быть легко, напримерс Apache Commons BeanUtils, но я сомневаюсь, что вам это действительно нужно, если в остальном у вас есть хорошие тесты.

Я создал Открытый pojo проект по решению этой проблемы точный проблема.

Проект позволяет вам проверять:

  • Обеспечить соблюдение стандарта кодирования Pojo (т. е.Все поля закрытые, или нет собственных переменных, ... и т.д.)
  • Принудительное выполнение поведения Pojo (т. е.сеттер выполняет ПРОСТО настройку, без преобразования и т.д.)
  • Проверка подлинности Pojo (т. е.Используйте равенство на основе аннотаций и генерацию хэш-кода)

Смотрите Учебное пособие

В большинстве случаев setter и getter выполняют больше, чем просто настройка и получение внутреннего поля.Объект должен проверять внутренние правила на то, что он содержит только допустимые значения.Например

  • возможны ли нулевые значения?
  • возможны ли пустые строки?
  • или отрицательные значения?
  • или нулевое значение?
  • или значения из списка являются допустимыми?
  • или есть какое-то максимальное значение?
  • или существует максимальная точность для больших десятичных значений?

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

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

Тестируйте свою бизнес-логику, а не средства получения и настройки.Результатом также должно быть покрытие геттера и сеттера.Методы должны быть любым результатом в вашей бизнес-логике, даже если у вас есть только общедоступная библиотека.Если получатель и установщик не имеют покрытия кода, то удалите его.

Я делал что-то подобное.Простой java-класс, который принимает объект и тестирует все методы получения и установки.http://sourceforge.net/projects/getterandsetter/

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

Я отдам предпочтение ОО-дизайну, а не покрытию кода, и посмотрю, не смогу ли я переместить эти поля в класс, который в них нуждается.Поэтому я бы попытался посмотреть, можно ли удалить эти геттеры и сеттеры, как предлагалось ранее.добытчики и сеттеры - это нарушение инкапсуляции.

Я предполагаю, что эта библиотека и есть ответ на ваш вопрос

он проверяет все начальные значения компонента, setters, тот самый getters, hashCode(), equals() and toString().Все, что вам нужно сделать, это определить сопоставление свойств / значений по умолчанию и не по умолчанию.

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

Я пробую использовать openpojo

Я пробил шины, и, кажется, это сработало.

  1. Это позволяет вам проверить все pojo в вашем проекте.
  2. Похоже, это проверка лучших практик на pojo's

Ознакомьтесь с этим руководством для быстрого начала Учебник

Отвечая на предыдущий комментарий по адресу здесь из-за моей репутации:

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

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

В других случаях эти методы действительно необходимы.Тогда есть две возможности:
1.Внутри них есть бизнес-логика.Затем их можно было бы протестировать, но они не являются настоящими получателями / сеттерами.Я всегда пишу эту логику в других классах.И тесты проверяют, что другие классы, а не ПОЙО.
2.Там его нет.Затем, если можете, не пишите их от руки.Например, реализация для следующего интерфейса может быть полностью сгенерирована автоматически (а также во время выполнения!). :

interface NamedAndObservable {
  String getName();
  void setName(String name);
  void addPropertyChangeListener(PropertyChangeListener listener);
  void addPropertyChangeListener(String propertyName,
                                 PropertyChangeListener listener);
}

Поэтому проверяйте только то, что написано от руки.Независимо от того, является ли это получателем / установщиком.

Я не пишу тестовые примеры для каждого свойства, но вместо этого тестирую все установщики / геттеры в одном тестовом примере, используя отражение / интроспектор для определения типа (ов).Вот отличный ресурс, который показывает это:

http://www.nearinfinity.com/blogs/scott_leberknight/do_you_unit_test_getters.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top