Pergunta

Sou um programador Java de longa data trabalhando em um projeto PHP e estou tentando colocar o PHPUnit em funcionamento.Ao testar unidades em Java, é comum colocar classes de casos de teste e classes regulares em diretórios separados, como este -

/src  
  MyClass.java

/test  
  MyClassTest.java

e assim por diante.

Ao testar unidades com PHPUnit, é comum seguir a mesma estrutura de diretórios ou existe uma maneira melhor de definir classes de teste?Até agora, a única maneira de fazer com que a instrução "include("MyClass.php")" funcione corretamente é incluir a classe de teste no mesmo diretório, mas não quero incluir as classes de teste quando pressiono para Produção.

Foi útil?

Solução

Acho que é uma boa ideia manter seus arquivos separados.Eu normalmente uso uma estrutura de pastas como esta:

/myapp/src/        <- my classes
/myapp/tests/       <- my tests for the classes
/myapp/public/      <- document root

No seu caso, para incluir a classe no seu arquivo de teste, por que não passar o caminho completo para o método include?

include('/path/to/myapp/src/MyClass.php');

ou

include('../src/MyClass.php');

Outras dicas

Você precisa modificar o include_path do PHP para que ele saiba onde encontrar MyClass.php quando você include() em seu teste de unidade.

Você poderia ter algo assim no topo do seu arquivo de teste (antes da inclusão):


set_include_path(get_include_path() . PATH_SEPARATOR . "../src");

Isso anexa seu src diretório no caminho de inclusão e deve permitir que você mantenha seu código real separado do código de teste.

A resposta de Brian Phillips não vai longe o suficiente, na minha experiência.Você não sabe qual é o diretório atual quando seus testes são executados pelo PHPUnit.Portanto, você precisa fazer referência ao caminho absoluto do arquivo de classe de teste em sua expressão set_include_path().Assim:

set_include_path(get_include_path() . PATH_SEPARATOR . 
                        dirname(__FILE__) . "/../src");

Este fragmento pode ser colocado em seu próprio arquivo de cabeçalho SetupIncludePath.php e incluído nos arquivos de teste com um 'require_once', para que os conjuntos de testes não anexem o caminho várias vezes.

Coloquei meus casos de teste próximos à fonte em um arquivo com o mesmo nome, mas com extensão .phpt.O script de implantação simplesmente filtra *.phpt quando ele é enviado para produção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top