Я тестирую результаты запроса. Таблица, в которой хранятся результаты, имеет такую структуру:
Id SomeValue Date Hour
-----------------------------------
1 foo1 2015-01-01 700
2 foo2 2015-01-01 800
3 foo3 2015-01-01 900
...
18 foo18 2015-01-01 2400
19 bar1 2015-01-02 100
20 bar2 2015-01-02 200
...
41 bar23 2015-01-02 2300
42 bar24 2015-01-02 2400
43 baz1 2015-01-03 100
44 baz2 2015-01-03 200
(and on...)
И запрос получает параметры для выполнения поиска на основе столбцов Date
и Hour
следующим образом:
SELECT *
FROM table
WHERE
(date, hour) >= (:dateFrom, :hourFrom)
AND (date, hour) <= (:dateTo, :hourTo)
-- there no ORDER BY clause in the query
Например, если я использую следующие значения:
-
dateFrom
: '2015-01-01' -
hourFrom
: 700 -
dateTo
: '2015-01-03' -
hourTo
: 600
Запрос возвращает все строки, где значение Date
находится между 2015-01-01
и 2015-01-03
, значения Hour
больше или равны 700 только для Date = 2015-01-01
, а значения Hour
меньше или равно 600 для Date = 2015-01-03
. В этом примере все строки с Date = 2015-01-02
будут извлечены из источника данных.
Я получаю результаты выполнения запроса в списке. Чтобы оценить результаты, я использую значения параметров, которые я использовал, чтобы проверить, соответствуют ли данные в списке. Я использую метод проверки, если дата элемента находится между dateFrom
и dateTo
, но мне интересно, как я могу проверить значения hourFrom
и hourTo
. У меня есть следующие идеи:
- Начните проверять значение minumum
Hour
на элементах, где значениеDate
равно моему параметруdateFrom
и проверьте, равно ли это значениеhourFrom
. Сделайте подобное дляhourTo
, но с максимальным значением тех строк, где значениеDate
равно значению параметраdateTo
. - Сортируйте список в моем методе тестирования
Date
иHour
, затем проверьте первый и последний элементы в списке. Используемый метод сортировки будет получен с языка программирования, который я использую.
Какой вариант правильный? Если нет, какова будет лучшая стратегия? Я использую Java для написания тестов, но этот вопрос больше сосредоточен на том, как писать тестовый метод, а не использовать технологию/фрейм. Кроме того, я не могу изменить запрос, чтобы добавить предложение ORDER BY
(что облегчит мою работу, но не выполнимо).
Я обеспокоен лучшей практикой. Я думал о сортировке данных, поэтому я буду делать утверждения по двум элементам, но потом я беспокоюсь, если мне также придется протестировать Comparator
, используемые для сортировки, потому что он может сортировать список неправильно, и мой тест не удастся, проверяя каждый элемент вручную означает использование операторов if-else
для утверждений, и я не уверен, что это хорошая практика.