2014-09-30 6 views
1

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

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

2) Данные и результаты меняются со временем! Например, если я запустил запрос для числа сотрудников, которые арендовали автомобиль на прошлой неделе, я всегда буду возвращать другой результат по мере продвижения вперед. Как я могу написать модульный тест, который знает, сколько результатов ожидать, если результаты будут отличаться от одного дня к другому?

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

+1

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

+1

Причина в том, что нет конкретного вопроса. Вы в основном просите «консультацию по единому тестированию», которую вы можете найти с помощью простого поиска в Google (хотя я рекомендую конкретно искать рекомендации BDD). Другими словами: какая конкретная проблема у вас есть и что вы пробовали? –

+0

1) Проверьте краевые шкафы; и, мы надеемся, используя структуру тестирования, которая позволяет проводить тесты, управляемые данными. 2) Результаты испытаний не должны меняться со временем, а только данные. Примите параметр времени (только данные сейчас) для таких тестов * и * используйте DI/IoC для получения объектов времени, чтобы их можно было насмехаться в тестах! Запрошенная тестовая база данных также должна быть не меняющейся (для ожидаемых данных/результатов). – user2864740

ответ

1

Мой комментарий Несмотря на вышесказанное, вот некоторые мысли:

  • В модульных тестов вы проверяете «единицы». Большая часть изящества в модульном тестировании определяет, что такое «единица». Итак, каковы ваши подразделения? Подсказка: они почти никогда не включают вовлечение базы данных.
  • Определение правильных единиц - это то, что предотвращает проблему изменения результатов и данных. Если бит ядра функциональности меняется, то обязательно, модульный тест нужно изменить или даже удалить, но в противном случае это должно быть минимальное обслуживание.
  • Комбинации и перестановки - проверьте, что вам действительно нужно проверить. Вы можете написать для этого вспомогательный код. Тем не менее, вы не всегда нуждаетесь в , нуждаетесь в, чтобы протестировать абсолютно все, испытать точку, которая полезна и не более.
  • Я считаю, что высокий уровень тестирования полезен, но вы, однако, не можете. Ваш опыт и способности при модульном тестировании в качестве полезных тестов могут быть.
+0

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

+1

@ RaySülzer База данных обычно считается внешней системой и, как таковая, не является частью «единицы». Обычно в этой ситуации вы либо передавали данные в качестве параметра, либо основывали источник данных на интерфейсе и заглушали его. 20 параметров в метод - ужасная идея, хотя частично по той самой причине, о которой вы заявляете. Нет никакого способа, чтобы они контролировали все те же аспекты расчета. Я призываю вас разделить его. Джошуа Блох рекомендует не более четырех параметров в методе. –

+0

Это не 20 параметров persay, метод принимает единственный объект класса «Сотрудник», который имеет кучу свойств на нем. Затем этот метод вызывает кучу частных методов, передаваемых в свойствах, которые возвращают bool в зависимости от значения. Я буду тестировать частные методы, просто передав один или два параметра, которые им нужны, и не будет тестировать публичный метод. –

Смежные вопросы