Подтвердить что ты не робот

Когда/Как Unit Test CRUD-приложения?

В последнее время я много слышал об модульном тестировании.

То, что я пытаюсь понять, - это то, как один из них должен был бы выполнить модульное тестирование грубого бизнес-приложения? (в основном приложение, которое записывает данные в/считывает данные из базы данных).

Является ли модульное тестирование даже стоящим в этом scenerio, или вы обычно unit test более сложные вещи?

Спасибо

4b9b3361

Ответ 1

Модульное тестирование - это тестирование дискретных единиц кода - единственный метод, не более.

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

Существует место для обоих типов тестирования (и других типов - регрессия, производительность и т.д.) в любом программном проекте, CRUD-приложении или нет.

Ответ 2

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

Ответ 3

Cruddy apps редко остаются грубыми. В конечном итоге они становятся частью бизнес-объекта.

Итак, да, я бы сделал модульное тестирование. Даже базовое грубое приложение должно быть разделено на уровень взаимодействия, уровень доступа к данным и невероятно простой интерфейс (обратите внимание, что все состояние пользовательского интерфейса должно храниться на уровне взаимодействия). В конце концов, вы, вероятно, получите слой бизнес-объекта между уровнями взаимодействия и доступа к данным.

Ответ 4

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

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

Например, модуль "Calculate some large сложный с использованием 47 различных переменных" должен иметь кучу тестов, которые обеспечивают хороший охват кода, а shoudl охватывает все возможные пути кода, но код, который actaully сохраняет этот результат обратно в базу данных не обязательно требует теста, особенно если он выполняет простую работу CRUD.

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

В конце концов, все о рентабельности инвестиций. Сколько времени вы вкладываете в это, и сколько вы получаете от него. Если ваши юнит-тесты приближаются к 100% -ному охвату кода на каком-то немом уровне доступа к данным вашего бизнес-приложения CRUDy, вы тратите свое время и деньги своего работодателя на простой и простой. Но если вы строите ракетки или медицинские устройства, или если вы являетесь магазином с двумя основными магазинами, у которого нет ресурсов для отдела QA, многие модульные тесты могут сэкономить вам много времени, денег и/или жизни.

Ответ 5

Проверьте все, что может сломаться.

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

Ответ 6

Модульное тестирование - это тестирование SMALL простых битов функциональности. Обычно вы использовали бы unit test уровень данных вашего приложения, который будет обрабатывать все функции CRUD. Тест для Create and Retrieve может выглядеть так:

    PrimaryKey = InsertObject(TestObject)

    if PrimaryKey = 0 then

     AssertTestFailed("Primary Key Not Returned.")

    end if


    NewInstanceOfObject = GetObject(PrimaryKey)

    If NewInstanceOfObject <> TestObject then
      AssertTestFailed("Record not located.")
else
      AssertTestPassed("This Code is awesome UnitTest Passed.")
    end if

Ответ 7

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

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

Существует огромное количество различных баз данных и сопровождающих их ORM в Интернете, но на мобильных платформах все ограничено. И это правильно, поскольку хранение данных на мобильных устройствах не очень хорошая идея, но бывают случаи, когда это необходимо. При написании CRUD на мобильной платформе я пишу модульные тесты.