como unificar totalmente funções de teste e sua validação interna

5

Estou entrando agora no teste de unidade formal e me deparei com um problema no teste de partes internas separadas das funções.

Eu criei uma classe base de manipulação de dados (isto é, mover arquivos, chmodding, etc) e em moveFile() eu tenho vários níveis de validação para identificar quando um moveFile() falha (ie arquivo de origem não legível, destino não gravável).

Eu não consigo descobrir como forçar algumas validações específicas a falharem, enquanto não desarmar as validações anteriores.

Exemplo:

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.

Snippit de código: (Código incorreto na quinta linha ...)

// 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]');
    }
}

Então, como faço para simular a cópia falhando. Minha medida de intervalo foi executar uma validação no nome do arquivo que está sendo copiado e, se o caminho absoluto corresponder ao meu arquivo de teste, force a falha. Eu sei que é muito ruim colocar o código de teste no código real que será usado para executar no servidor de produção, mas não tenho certeza de como fazer isso.

Nota: Eu estou no PHP 5.2, symfony, usando lime_test() .

EDITAR Eu estou testando o chmodding e assegurando que o array ('success' = > false, 'type' = > ..) seja retornado

    
por Patrick 08.02.2011 / 17:39
fonte

2 respostas

2

So how do I simulate the copy failing.

Você simula a função chmod() para que ela possa retornar o status do erro.

    
por 08.02.2011 / 19:02
fonte
0

Hmm. É complicado fazer o chmod () do PHP falhar. Eu encontrei um caminho, embora não tenha certeza se isso ajuda no seu caso. Eu assumo um ambiente Unix, não sei como funcionaria no Windows.

chmod () irá falhar em "muitos links simbólicos", então tente configurar uma situação onde você tenha um link simbólico apontando para si mesmo. Algo como:

ln -s foo.file foo.file

e agora o chmod ("foo.file") do PHP irá falhar com

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

Assim, se o foo.file acima passar seus outros testes, ele deve falhar no chmod ().

    
por 08.02.2011 / 21:36
fonte