Я тестирую результаты запроса. Таблица, в которой хранятся результаты, имеет такую структуру:
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 для утверждений, и я не уверен, что это хорошая практика.