我正在測試查詢的結果。其中,結果存儲在表中有這樣的結構:可以在測試用例的主體中對List進行排序以檢查邊界數據嗎?
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's no ORDER BY clause in the query
例如,如果我使用以下值:
dateFrom
: '2015年1月1日'hourFrom
:700dateTo
: '2015年1月3日'hourTo
:600
查詢將返回所有行,其中的Date
值爲2015-01-01
和2015-01-03
之間,的hour
的值是對於Date = 2015-01-01
僅高於或等於700,對於Date = 2015-01-03
,hour
的值低於或等於600。在此示例中,將從數據源中檢索所有包含Date = 2015-01-02
的行。
我在列表中檢索查詢的執行結果。爲了評估結果,我使用了我用來檢查列表中的數據是否符合它們的參數的值。我正在使用一種方法來檢查元素的日期是否在dateFrom
和dateTo
之間,但我想知道如何測試hourFrom
和hourTo
的值。我有以下觀點:
- 開始爲
hour
在哪裏的Date
值是元素的最少值進行覈對等於我dateFrom
參數,並檢查該值等於hourFrom
。對於hourTo
執行類似的操作,但對於Date
值等於dateTo
參數值的那些行的最大值。 - 將我的測試方法中的列表按
Date
和Hour
排序,然後檢查列表中的第一個和最後一個元素。要使用的排序方法將從我正在使用的編程語言中獲得。
哪個選項是正確的?如果沒有,那麼最好的策略是什麼?我使用Java編寫測試,但是這個問題更關注於如何編寫測試方法,而不是要使用的技術/框架。另外,我無法修改查詢來添加ORDER BY
子句(這會減輕我的工作量,但不可行)。
我很關心最佳實踐。我正在考慮對數據進行排序,所以我會對兩個元素進行斷言,但是我擔心如果我還需要測試用於排序的Comparator
,因爲它可能會錯誤地對列表進行排序,並且我的測試將失敗,同時手動檢查每個元素意味着使用if-else
聲明來聲明斷言,我不確定這是否是一種好的做法。
這似乎很有趣,比我目前的想法更有用。我明天會測試這個(現在是星期日晚上8點),並會告訴你它是如何發生的。謝謝。 –