Come posso testarlo?

3

Ho provato prima a provare su Ruby on Rails usando Test Unit e RSpec.

Mi chiedo come eseguire il test prima in situazioni che sono più strettamente legate al sistema operativo / al filesystem.

Problema: Creazione di una penna USB di file MP4.

Ingressi:

  1. Elenco del nome del file mp4, coppie di directory di destinazione.
  2. Elenco delle directory di origine
  3. Elenco delle directory di destinazione

Output:

  1. Chiavetta USB con una struttura di directory di file mp4.

Ecco un codice che fa ciò che voglio. Scritto usando mette il debug:

#!/bin/env ruby
# encoding: utf-8

require 'fileutils'

files = [
    [ 'Keynote_ Architecture the Lost Years by Robert Martin.mp4', 'dev' ],
    [ 'The Oak Beams of New College, Oxford.mp4', 'arch' ],
    [ '1. How Buildings Learn - Stewart Brand - 1 of 6 - “Flow”.mp4', 'arch/how_buildings_learn' ],
    [ 'Hexagonal Rails by Matt Wynne.mp4', 'dev' ]
]

dirs = [
    'arch',
    'arch/how_buildings_learn',
    'dev'
]

sources = [
    '/home/gnoll110/dwhelper',
    '/home/gnoll110/Downloads',
    '/home/gnoll110/GNUstep/Downloads',
    '/home/gnoll110'
]

dest = '/media/Lexar'

dirs.each do | dir |
    if !File.exist?( dest+'/'+dir )
        system( 'mkdir '+dest+'/'+dir )
    end
end

files.each do | file |
    actual_source = false
    sources.each do | source |
        res = File.exist? source+'/'+file[0]
        actual_source = source if res
    end

    if actual_source
        FileUtils.cp(actual_source+'/'+file[0], dest+'/'+file[1] )
    end
end.

Qual è l'approccio migliore?

  • Posta il codice esistente. Dopotutto, sto provando a fare il test prima.

  • Scrivi un test che invoca un oggetto Command Pattern. La dipendenza inserisce gli array di dati nel costruttore.

  • Quindi iniettare "file exist" e "fileutils copy" come stub / mock, per ottenere la separazione dal sistema operativo / dal filesystem.

  • Costruisci, asserisci e rifatta il metodo di esecuzione entro un pollice della sua durata.

Tutti i suggerimenti e le idee sono i benvenuti.

    
posta gnoll110 14.07.2013 - 15:23
fonte

1 risposta

2

Hai posto due domande:

  1. Come testare il codice dell'unità che tocca il filesystem
  2. Dovresti eliminare il codice esistente non testato.

Oggetto: come testare il codice dell'unità che tocca il file system:

Il modo migliore per farlo è mettere le chiamate del filesystem dietro un'interfaccia che sarà messa alla prova per il test delle unità del resto del sistema. Solo la funzione 'principale' delle tue applicazioni istanzia le versioni reali di questi metodi.

Il codice che contiene le chiamate al filesystem reale dovrebbe essere molto sottile, in modo che non si possa né preoccuparsi di testarlo (poiché è possibile verificarlo tramite ispezione o test rapido del fumo dell'intero sistema) o testarlo con poche integrazioni test che usano il vero filesystem.

Ri: Junking codice esistente:

Questa è una chiamata di giudizio da parte tua.

Potresti considerare il tuo codice esistente come un prototipo che ti ha aiutato a imparare il tipo di cosa che devi fare. Se questo è il caso, dovresti eliminarlo e riscriverlo ora che hai una conoscenza migliore.

Oppure potresti prendere in considerazione il codice legacy e farlo testare. Per farlo scrivi alcuni test completi del sistema per impedirti di romperlo mentre lo rifatti. Vedi "Lavorare efficacemente con il codice legacy" di Michael Feathers per le tecniche per farlo in modo sicuro.

    
risposta data 06.01.2014 - 15:30
fonte

Leggi altre domande sui tag