2015-03-12 6 views
5

Sto sviluppando un'applicazione che fa molto affidamento su Joda-Money e ho un numero di test unitari che verificano la mia logica aziendale. Un punto (perlomeno secondario) per me è stato il tipo di oggetti da testare con Money/BigMoney; in particolare, cosa usare da CurrencyUnit.Quale valuta usare nei test unitari?

come la vedo io, ho un paio di opzioni:

  • Basta usare USD

    Questo è chiaramente il modo più semplice per andare, e la maggior parte della mia effettiva applicazione lavorerò con gli Stati Uniti Dollari quindi ha un buon senso. D'altra parte, sembra piuttosto incentrato sugli Stati Uniti, e sono preoccupato che rischierebbe di lasciare deselezionati gli errori specifici della valuta.

  • Usa un'altra valuta reale, come CAD

    Questo avrebbe raggiunto errati hard-codifiche di USD, ma per il resto non è molto meglio di un semplice utilizzando USD.

  • Utilizzare un apposito "fake" currency, vale a dire XTS

    Questo ha chiaramente un senso, dopo tutto, XTS è "a disposizione per l'uso nei test". Ma Joda indica le valute psuedo come valute con le cifre decimali -1. In pratica, la differenza principale tra le valute in Joda-Money è il numero di posizioni decimali, quindi questo rischia di mascherare eventuali errori che coinvolgono la precisione della cifra decimale, come erroneamente l'arrotondamento a un valore intero.

  • registrare il mio propria valuta personalizzato con CurrencyUnit.registerCurrency()

    Questo sarebbe ovviamente lavorare, ma sembra un po 'strano come vedere ci sono alternative.

  • utilizzare un'istanza CurrencyUnit creato da una libreria beffardo

    Praticamente la stessa registrazione di un valuta personalizzato.

Ancora una volta, questo è ovviamente un problema minore, ma io sono curioso di sapere se c'è una pratica standard per casi come questo, o se c'è un chiaro motivo per preferire una di queste opzioni in particolare.

+0

Questo non mi sembra secondario. Stai per diffondere questa decisione in tutti i tuoi test unitari, giusto? Se non riesci a far esistere questa decisione in un solo posto, stai per esserne bloccato per sempre. – CandiedOrange

+0

@CandiedOrange è d'accordo, ma ho avuto altre domande con cui ho fatto una doccia "perché stai anche perdendo il tuo tempo con questo?!?!?!?!?!" risposte, quindi chiamare tutte le mie curiosità "minori" preoccupazioni è un po 'un meccanismo di difesa. – dimo414

+2

Gli odiatori odieranno. Continua a chiedere, stai ottimista e l'amore ti troverà. Pace. – CandiedOrange

risposta

2

Utilizzare USD (o, in generale, qualsiasi altra valuta utilizzata più comunemente nell'applicazione). Dico questo per due motivi:

  • buoni dati del test è irrilevante sotto ogni aspetto, tranne quella parte di esso che il test è in realtà circa. Quando scrivi dei test che non hanno nulla a che fare con le differenze tra le valute, non devi pensare alle differenze tra le valute. Basta usare ciò che è più naturale nell'applicazione.

  • L'idea che l'utilizzo di una valuta insolita dappertutto porti in qualche modo a una migliore verifica delle valute insolite è una falsa pista. I test dovrebbero essere espliciti e mirati. Se hai bisogno di testare qualcosa su una valuta specifica, scrivi un test il cui punto è testare quella cosa.E se un test non riguarda una valuta specifica, non dovrebbe rompersi quando si maneggia un aspetto insolito delle interruzioni di valuta: non è utile che metà dei test si interrompa per lo stesso motivo; ne vuoi solo uno da rompere. Quindi non vi è alcuna necessità di diffondere valute insolite intorno alla suite di test e sperare che ciò accolga qualcosa. Invece, ottimizzare per la leggibilità; vedere il punto 1.

+1

Grazie, quell'anello razionale è piuttosto vero per me. Se sto scrivendo un codice che è esplicitamente dipendente dalla valuta, dovrei testarlo in più valute, non basandomi sul framework di test per introdurre edge case per me. – dimo414