Sto testando i risultati di una query. La tabella in cui sono archiviati i risultati ha una struttura come questa:È corretto ordinare una lista nel corpo del caso di test per verificare i dati di confine?
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...)
e la query riceve parametri al fine di fare la ricerca in base a Date
e Hour
colonne come questo:
SELECT *
FROM table
WHERE
(date, hour) >= (:dateFrom, :hourFrom)
AND (date, hour) <= (:dateTo, :hourTo)
-- there's no ORDER BY clause in the query
Ad esempio, se uso i seguenti valori:
dateFrom
: '2015-01-01'hourFrom
: 700dateTo
: '2015-01-03'hourTo
: 600
La query restituirà tutte le righe in cui il valore di Date
è tra 2015-01-01
e 2015-01-03
, i valori di hour
sono superiore o uguale a 700 solo per Date = 2015-01-01
e i valori di hour
sono inferiori o uguali a 600 per Date = 2015-01-03
. In questo esempio, tutte le righe con Date = 2015-01-02
verranno recuperate dall'origine dati.
Recupero i risultati dell'esecuzione della query in un elenco. Per valutare i risultati, sto usando i valori dei parametri che ho usato per verificare se i dati nella lista sono conformi a loro. Sto usando un metodo per verificare se la data dell'elemento è compresa tra dateFrom
e dateTo
, ma mi chiedo come posso verificare i valori di hourFrom
e hourTo
. Ho le seguenti idee:
- avviare il controllo per il valore minumum di
hour
sugli elementi in cui il valore diDate
è uguale al mio parametrodateFrom
e verificare se questo valore è uguale ahourFrom
. Fare lo stesso perhourTo
ma con il valore massimo di quelle righe il cui valore diDate
è uguale al valore del parametrodateTo
. - Ordinare l'elenco nel metodo di prova per
Date
eHour
, quindi controllare il primo e l'ultimo elemento nell'elenco. Il metodo di ordinamento da utilizzare sarà ottenuto dal linguaggio di programmazione che sto utilizzando.
Quale opzione è corretta? Se nessuno, quale sarà la migliore strategia per farlo? Sto usando Java per scrivere i test, ma questa domanda è più focalizzata su come scrivere il metodo di test piuttosto che sulla tecnologia/framework da usare. Inoltre, non posso modificare la query per aggiungere una clausola ORDER BY
(che faciliterebbe molto il mio lavoro ma non è fattibile).
Sono preoccupato per le migliori pratiche. Stavo pensando di ordinare i dati, quindi farò asserzioni su due elementi ma poi mi preoccupo se devo testare anche lo Comparator
usato per l'ordinamento perché potrebbe ordinare l'elenco in modo errato e il mio test fallirà, controllando ogni elemento manualmente significa usare le dichiarazioni if-else
per le asserzioni e non sono sicuro che sia una buona pratica.
Questo sembra interessante e più utile delle mie idee attuali. Ci metterò alla prova domani (attualmente per me alle 8 di domenica) e ti farò sapere come è andata. Grazie. –