Termine per il test dell'unità che separa la logica di test dai dati del risultato del test [chiuso]

3

Quindi non sto facendo test di unità. Ma ho avuto l'idea di renderlo più appropriato per il mio campo di utilizzo. Tuttavia non è chiaro se esista qualcosa del genere, e se, come potrebbe essere chiamato.

I test di unità ordinaria combinano la logica di test e il risultato atteso. In sostanza, il framework di testing controlla solo i booleani (ha fatto questa corrispondenza, ha fatto il risultato del risultato atteso). Per generalizzare, il codice di test stesso fa riferimento alle funzioni controllate e inoltre esplicita i valori del risultato in questo modo:

unit::assert(  test_me() == 17  )

Quello che sto cercando è una separazione delle preoccupazioni. Il test stesso dovrebbe contenere solo la logica testata. I dati sui risultati e sui risultati dovrebbero essere gestiti dal test unitario o dal quadro di asserzione. Ad esempio:

unit::probe(   test_me()   )

Qui probe raddoppia effettivamente come collector nella prima esecuzione e in seguito come metodo di verifica. L'atteso 17 non è menzionato nel codice di test, ma memorizzato o gestito altrove.

Come si chiama questo schema? O come lo chiameresti? Spero di poter trovare alcune implementazioni effettive con la terminologia corretta.

Ovviamente un tale schema non è adatto per TDD. È strettamente per i test di regressione. Inoltre, ovviamente, non può essere utilizzato per tutti i casi. Solo i soggetti di prova più semplici possono essere analizzati in questo modo, per qualsiasi altra cosa sono richiesti i normali passaggi di prova e di asserzione dell'unità. E sì, questo potrebbe essere realizzato manualmente creando un ResultWhateverObject, ma ciò richiederebbe ancora il cablaggio alla logica di test.
Inoltre, tieni presente che sto cercando informazioni sui linguaggi di scripting e non su Java. Sono consapevole che il pattern xUnit ha origine lì e perché è così elaborato come è.

A proposito, ho scoperto un framework di esecuzione di test che consente di abbreviare le semplici notazioni di test a:

test_me();   // 17

Anche se in questo modo i dati dei risultati non sono più codificati (è un commento), non è ancora una separazione completa e, naturalmente, funzionerebbe solo per risultati scalari.

    
posta mario 07.01.2011 - 05:10
fonte

2 risposte

1

Esiste un test basato sui dati. Queste non sono la stessa cosa che stai chiedendo, ma potrebbero aiutarti con alcune di quelle che desideri.

Fondamentalmente, l'idea è che definiamo le strutture dati ed eseguiamo test basati su di esse.

Un esempio:

translations = {
    1 : 'I',
    2 : 'II',
    4 : 'IV',
    125 : 'CXXV'
}

def test_roman():
    for number, roman in translations.items():
        assert to_roman(number) == roman
        assert from_roman(roman) == number

Questo rende molto più facile aggiungere ulteriori casi di test. In framework con supporto per esso può essere facilmente realizzato in modo che questo venga effettivamente registrato come molti test.

Non sono sicuro di cosa esattamente tu abbia tentato di ottenere dalla tua tecnica. Devi fare i conti con tutte le impostazioni dei test unitari ma saltare quella che sembrerebbe essere una parte relativamente secondaria: specificare l'output. Sembra un risparmio così piccolo e raramente sarebbe utile.

    
risposta data 07.01.2011 - 07:42
fonte
1

Ciao.
Se vuoi davvero separare la logica, alla fine vuoi costruire un framework di automazione del test per la tua app, e quindi scrivere test unitari che useranno questa nuova API, invece di scrivere solo test unitari. La maggior parte dei programmatori potrebbe dire che non sono più test unitari ... e forse no. Ma non è importante. Puoi ancora farlo bene. Di seguito sono riportati i link, che dovrebbero farti andare. Anche se parlano di creare test funzionali che funzionano su tutta l'applicazione (livello gui), penso che lo stesso approccio che puoi applicare per raggiungere il tuo obiettivo. In breve, si presenta come scrivere test a 3 strati, in modo da separare la logica dall'implementazione.

risposta data 13.02.2011 - 13:54
fonte

Leggi altre domande sui tag