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:
- Elenco del nome del file mp4, coppie di directory di destinazione.
- Elenco delle directory di origine
- Elenco delle directory di destinazione
Output:
- 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.