Sto appena entrando nei test di unità formali e ho riscontrato un problema nel testare parti interne separate delle funzioni.
Ho creato una classe base di manipolazione dei dati (ad esempio, spostando file, file chmodding, ecc.) e in moveFile()
ho più livelli di convalida per individuare quando un moveFile()
fallisce (cioè il file sorgente non è leggibile, destinazione non scrivibile).
Non riesco a capire come forzare un paio di convalide particolari a fallire senza inciampare nelle convalide precedenti.
Esempio:
I want the copying of a file to fail, but by the time I've gotten to the actual copying, I've checked for everything that can go wrong before copying.
Code Snippit: (codice errato sulla quinta riga ...)
// if the change permissions is set, change the file permissions
if($chmod !== null)
{
$mod_result = chmod($destination_directory.DIRECTORY_SEPARATOR.$new_filename, $chmod);
if($mod_result === false || $source_directory.DIRECTORY_SEPARATOR.$source_filename == '/home/k...../file_chmod_failed.qif')
{
DataMan::logRawMessage('File permissions update failed on moveFile [ERR0009] - ['.$destination_directory.DIRECTORY_SEPARATOR.$new_filename.' - '.$chmod.']', sfLogger::ALERT);
return array('success' => false, 'type' => 'Internal Server Error [ERR0009]');
}
}
Quindi, come faccio a simulare il fallimento della copia. La mia misura dello stop-gap era di eseguire una convalida sul nome del file da copiare e, se si trattava di un percorso assoluto corrispondente al mio file di test, forzare l'errore. So che è molto brutto inserire il codice di test nel codice effettivo che verrà utilizzato per l'esecuzione sul server di produzione, ma non sono sicuro di come farlo.
Nota:
Sono su PHP 5.2, symfony, usando lime_test()
.
Modifica Sto testando il chmodding e assicurandomi che l'array ('success' = > false, 'type' = > ..) sia restituito