Attualmente sto scrivendo un framework di test bash, in cui in una funzione di test è possibile utilizzare sia test bash standard ( [[
) che matcher predefiniti. I matcher sono wrapper per '[[' e oltre a restituire un codice di ritorno, impostano un messaggio significativo che dice ciò che ci si aspettava.
Esempio:
string_equals() {
if [[ ! $1 = $2 ]]; then
error_message="Expected '$1' to be '$2'."
return 1
fi
}
Quindi, quando viene utilizzato un matcher e fallisce, solo allora viene impostato un messaggio_errore.
Ora, a un certo punto dopo, provo se i test hanno avuto successo. Se è andato a buon fine, stampo l'aspettativa in verde, se è fallito in rosso.
Inoltre, potrebbe essere impostato un messaggio error_message, quindi provo se un messaggio esiste, lo stampo e quindi lo disattivi (perché il seguente test potrebbe non impostare un error_message
):
if [[ $error_message ]]; then
printf '%s\n' "$error_message"
unset -v error_message
fi
Ora la mia domanda è, se è meglio annullare l'impostazione della variabile o semplicemente impostarla su "", come
error_message=''
Qual è il migliore? Fa davvero la differenza? O forse dovrei avere un flag aggiuntivo che indica che il messaggio è stato impostato?
error_message
con nient'altro, direi che non importa. Tuttavia, penso che tu voglia[[ $error_message ]]
, altrimenti stai testando l'esistenza della stringa letterale "messaggio_errore".