Ho una domanda ricorrente durante la scrittura di unit test per il codice che implica valori di stringa costante.
Prendiamo un esempio di un metodo / funzione che esegue qualche elaborazione e restituisce una stringa contenente una costante predefinita. In Python, sarebbe qualcosa di simile:
STRING_TEMPLATE = "/some/constant/string/with/%s/that/needs/interpolation/"
def process(some_param):
# We do some meaningful work that gives us a value
result = _some_meaningful_action()
return STRING_TEMPLATE % result
Se voglio test unitario process
, uno dei miei test controllerà il valore restituito. È qui che mi chiedo quale sia la soluzione migliore.
Nel mio test di unità, posso:
- applica DRY e utilizza la costante già definita
- ripeti me stesso e riscrivo l'intera stringa
def test_foo_should_return_correct_url():
string_result = process()
# Applying DRY and using the already defined constant
assert STRING_TEMPLATE % "1234" == string_result
# Repeating myself, repeating myself
assert "/some/constant/string/with/1234/that/needs/interpolation/" == url
Il vantaggio che vedo nel primo è che il mio test si interromperà se inserirò il valore di stringa sbagliato nella mia costante. L'inconveniente è che potrei riscrivere la stessa stringa più e più volte attraverso diversi test di unità.