come integrare completamente le funzioni di test e la loro convalida interna

5

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

    
posta Patrick 08.02.2011 - 17:39
fonte

2 risposte

2

So how do I simulate the copy failing.

Si prende in giro la funzione chmod() in modo che possa restituire lo stato di errore.

    
risposta data 08.02.2011 - 19:02
fonte
0

Hmm. È difficile far fallire il chmod () di PHP. Ho trovato un modo, anche se non sono sicuro che sia d'aiuto nel tuo caso. Presumo un ambiente Unix, non sono sicuro di come funzionerebbe su Windows.

chmod () fallirà in "troppi collegamenti simbolici", quindi cerca di impostare una situazione in cui hai un link simbolico che punta a se stesso. Qualcosa come:

ln -s foo.file foo.file

e ora chmod di PHP ("foo.file") fallirà con

Warning: chmod(): Too many levels of symbolic links

Quindi, se il file foo.file supera gli altri test, dovrebbe fallire su chmod ().

    
risposta data 08.02.2011 - 21:36
fonte

Leggi altre domande sui tag