Что стоит протестировать в модели / сущности ActiveRecord?

Я только начал с модульного тестирования, и я немного запутался и немного ошеломлен, когда испытуемый тестирует модели. В настоящее время у меня есть некоторые модели ActiveRecord с сеттерами и геттерами. Большинство из них просто для инкапсуляции данных, только некоторые из них приносят что-то новое, например, метод getFullName (), который возвращает конкатенацию полей firstName и lastName.

Так что я должен проверить? Должен ли я проверять каждое присвоение свойства или тестировать только специальные методы, такие как getFullName ()? В какой степени я должен идти? Когда я должен проверять сам класс, а когда я должен проверять вставку базы данных? Как насчет проверки, уже присутствующей в объекте, я должен принять это во внимание?

Что поражает меня, так это количество тестов, которое мне понадобится для объекта с большим количеством полей. Есть ли способ обойти это?

Примеры будут особенно оценены!

0

Решение

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

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

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

Я нахожусь во втором лагере и обнаружил, что если что-то трудно проверить или испытывает боль при тестировании, это признак того, что у меня есть проблема с моим дизайном. В этом случае у вас могут быть методы доступа для ненужных вещей. Вероятно, произошло то, что у вас есть все ваши свойства в вашем объекте данных, и вам «нужно» иметь геттер и сеттер для каждого из них. Но правда ли?

В своем вопросе вы упомянули, что у вас есть getFullName метод. Так вам действительно нужны методы для getFirstName а также getLastName? Почему данные в объекте изменятся во время рендеринга страницы? Почему бы не отказаться от сеттеров и сделать запись данных «неизменяемой», чтобы обновление выполнялось путем отправки нового объекта в базу данных для обновления / создания?

Могу поспорить, что причина того, что у вас возник этот вопрос, заключается в том, что вы написали этот код и теперь пытаетесь вернуться и написать тесты для него. У вас есть этот объект данных и автоматически созданные методы получения и установки для всего. Затем написал дополнительные методы, которые вам нужны, так как вы использовали его (например, getFullName метод). Скорее, я бы порекомендовал вам создавать аксессоры только по мере необходимости. Затем вы создадите тест в то время и увидите, что список функций существенно меньше. У вас может быть несколько методов, которые получают комбинации данных, которые вам требуются, а также общий метод для получения всех данных в определенной форме (например, json).

0

Другие решения

Других решений пока нет …