Confini di test unitari tra il mio codice e una libreria o sottocomponente

4

Contesto: sono nuovo nel test in generale e lo sto studiando nel contesto di JavaScript, in particolare React.js, sviluppo front-end (in realtà anche nuovo). Per la domanda, ho questi 2 casi simili:

Caso 1: il mio codice e una libreria

Uso la libreria dell'interfaccia utente e, a parte il suo design decente, voglio sfruttare le sue utilità di convalida dei moduli. Voglio testare questa convalida, ma non sono sicuro di come farlo.

  • Opzione 1: prova solo per i comportamenti che mi aspetto

    Sarebbe testare se il mio campo (che è un sottomodulo della libreria stessa) riceve le classi specifiche della libreria per i campi con errori come previsto, e se questi errori impediscono di chiamare il gestore di invio ho passato al modulo (anche sotto-modulo della biblioteca).

    • Problema A con l'opzione 1

      Molto probabilmente sto duplicando test che sono già coperti dalla libreria stessa. (Ad esempio, sto verificando se il campo riceve le classi di errore quando l'input non è valido quando la libreria stessa ha testato se lo fa, data la configurazione corretta.)

    • Problema B con l'opzione 1

      Lega leggermente il codice di test alla libreria, cioè devo usare classi e markup specifici della libreria per valutare il mio codice.

      Ok, questa è in realtà una domanda a parte, è una cosa brutta per un test? Questo rende il test fragile, o è quello che chiamano "contratto" che è effettivamente necessario per i test unitari?

  • Opzione 2: verifica quale sottomodulo viene utilizzato e quale configurazione è passata

    • Problema A con l'opzione 2

      Questo è molto più fragile, penso, È quasi come ripetere l'implementazione (cioè ripetere il sottomodulo di tipo usato e la configurazione passata ad esso.)

    • Problema B con l'opzione 2

      Come il problema A di Opzione 1 - test di accoppiamento all'API della libreria, in particolare la sua API di configurazione. (Di nuovo, non sono sicuro che questo sia solo un test fragile, o un contratto scritto)

Caso 2: il mio codice e il suo sottocomponente

Ho il mio buono 'ol to do app . Il suo componente to do list ha il metodo addTodo() e passa al suo componente secondario to do field . Voglio testare la sua funzionalità per aggiungere l'articolo, ma non sono sicuro su come farlo.

  • Opzione 1: Di nuovo, prova solo per i comportamenti che mi aspetto

    Test 'to do app' that if input and submit with sub-component 'to do field', another 'to do item' is added. (This is implemented by passing 'addTodo()' method from 'to do app' to 'to do field' as onSubmit handler)
    
    • Problema A con l'opzione 1

      Se lo farò, c'è ancora un punto in unità che testa il to do field da solo? Se ho già testato unitamente to do field che chiama qualsiasi gestore onSubmit al momento dell'invio, questo% test di casi di prova di to do app ripeterà indirettamente il caso di test to do field ??

  • Opzione 2: verifica se viene utilizzato il sottocomponente corretto e quale configurazione viene passata (simile all'opzione 2 del caso 1)

    Le sue specifiche sarebbero le seguenti:

    • Test unitario to do app per affermare ...
      • il metodo to do app di addTodo() aggiunge un elemento todo correttamente
      • che to do app rende to do field sotto-componente
      • e che to do app passa addTodo() a come gestore onSubmit a to do field
    • quindi anche unit test to do field per affermare che ...
      • che to do field chiama onSubmit, che viene ricevuto dal componente principale, durante l'invio

La domanda

Quale di queste opzioni è migliore, soprattutto se preferisco BDD rispetto a TDD? Inoltre, per favore correggimi se hai notato che ho frainteso qualcosa. Grazie.

    
posta Christopher Regner 11.07.2017 - 05:14
fonte

1 risposta

0

Stai testando un'interfaccia utente. Questo è esattamente ciò che è stato creato per test funzionali. Vuoi testare il comportamento dell'interfaccia che hai creato, in particolare:

  • Quando lo schermo viene caricato per la prima volta, il pulsante di invio è visibile / selezionabile? Se non dovrebbe essere, puoi testarlo.
  • Inserisci dati non validi nel tuo campo di testo. Utilizzare tutti i diversi tipi di dati non validi che si è configurato per verificare. Il pulsante di invio dovrebbe essere probabilmente visibile / selezionabile, ma facendo clic su di esso dovrebbe generare una sorta di messaggio di errore. Verifica che il messaggio di errore venga visualizzato come previsto.
  • Inserisci dati validi nel tuo campo di testo. Il pulsante di invio dovrebbe essere visibile / selezionabile e fare clic su di esso dovrebbe produrre il risultato corretto. Verifica che sia visualizzato il risultato corretto.

L'uso di test funzionali come questo impedisce l'accoppiamento alla tua libreria. La modifica della libreria dovrebbe comportare il passaggio di questi test. Anche il rilascio della libreria e l'esecuzione delle routine di convalida devono comportare il passaggio di questi test.

Se non hai scelto uno strumento di test funzionale, puoi prendere in considerazione Selenium . Ti permetterà di scrivere ed eseguire test funzionali.

    
risposta data 09.01.2019 - 22:25
fonte

Leggi altre domande sui tag