O problema
Para melhorar minha qualidade de código, decidi tentar aprender como testar meu código usando Teste de Unidade em vez de minhas soluções de teste medíocres na melhor das hipóteses.
Decidi instalar o PHPUnit usando o composer para uma biblioteca pessoal que me permite obter funções de banco de dados comuns. No começo eu não tinha um arquivo de configuração para PHPUnit e quando executei comandos como:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Observe que este é um comando de terminal, portanto, não incluí a .php
extensão. O GeneralStringFunctionsTest mencionado acima é na verdade um GeneralStringFunctionsTest.php
arquivo.
O resultado é o que eu esperava:
Tempo: 31 ms, Memória: 2,75 MB
OK (1 teste, 1 afirmação)
Em seguida, tentei usar um arquivo de configuração para carregar automaticamente o conjunto de testes em vez de ter que digitar o arquivo manualmente todas as vezes. Criei um arquivo chamado phpunit.xml
em meu diretório raiz e inseri o seguinte no arquivo: http://pastebin.com/0j0L4WBD :
<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
<testsuites>
<testsuite name="Tests">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Agora, quando executo o comando:
phpunit
Eu obtenho a seguinte saída:
PHPUnit 4.5.0 por Sebastian Bergmann e colaboradores.
Configuração lida em /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml
Tempo: 16 ms, Memória: 1,50 Mb
Nenhum teste executado!
Caso seja útil, minha estrutura de diretório é a seguinte:
src - Diretório de nível superior (com todo o meu código-fonte)
testes - Diretório de nível superior (com todos os meus testes, estruturado da mesma forma que minha pasta src )
fornecedor - Arquivos de terceiros do Composer
Eu também tenho o composer json e o arquivo de bloqueio, bem como o arquivo xml phpunit no nível superior como arquivos.
Coisas que eu tentei
- Mudando o diretório
phpunit.xml
paratests/GeneralStringFunctions
- Mudando o diretório
phpunit.xml
para./tests
- Movendo o
phpunit.xml
arquivo para otests
diretório e alterando o diretório em./
vez detests
. - Adicionando um atributo de sufixo à tag de diretório em
phpunit.xml
para especificar "Testes" como o sufixo explícito.
fonte
tests/GeneralStringFunctions/GeneralStringFunctionsTest
uma pasta ou um nome de arquivo?GeneralStringFunctionsTest.php
. Na interface da linha de comando, não digitei a.php
extensão porque funcionava sem ela.Test.php
vez deTest
no seu caso, mas, no entanto, você é livre para omiti-lo, poisTest.php
é o valor padrão.phpunit.xml
?Respostas:
Pelo que vale a pena (estar atrasado), encontrei isso recentemente enquanto estava fazendo um novo projeto Laravel 5.1 para um site simples. Tentei depurar e fiquei confuso quando tentei:
(que tem um teste padrão que apenas afirma que verdadeiro é verdadeiro)
e vi a saída
O problema acabou sendo para mim relacionado à minha instalação do PHP - "phpunit" foi registrado globalmente e configurado de forma diferente, enquanto o phpunit que veio com a instalação do Laravel foi configurado corretamente e funcionou perfeitamente.
Portanto, a correção é executar o phpunit configurado do fornecedor (do mesmo diretório raiz que app / e tests /):
Espero que ajude mais alguém!
fonte
vendor/bin/phpunit
vez dophpunit
binário global . Cheguei até a remover ophpunit
binário global para não cometer o mesmo erro acidentalmente - e ele não apareceu desde então. Vou marcar esta como a resposta aceita, pois muito provavelmente é o motivo../vendor/bin/phpunit
funcionou para mim em uma nova instalação do laravel 5.4phpunit
alias
for./vendor/bin/phpunit
Seu arquivo XML está bem como está. No entanto, você deve certificar-se de que os arquivos PHP em sua
tests/
pasta tenham os seguintes nomes:tests / Test.php <--- Observe o "T" maiúsculo
tests / user Test.php
tests / fooBar Test.php
etc.
Os nomes dos arquivos devem terminar com "Test.php" . Isso é o que o PHPUnit está procurando nos diretórios.
Além disso, cada método de teste deve ter um nome que começa com "teste":
public function testFooBar() { // Your test code }
Espero que ajude!
fonte
--test-suffix=anything.php
para substituirNo Windows, use o seguinte comando no terminal
isso é se o comando
retorna "Nenhum teste executado!"
enquanto no Mac
Espero que ajude.
fonte
phpunit
em seu caminho global (você pode verificar executando algo comophpunit --version
e ver se ele corresponde ao que você esperava. O Xampp geralmente instala um phpunit no mesmo diretório bin de php. Esse foi o problema para mim.Tive o mesmo problema depois que o PHPUnit em nossas máquinas virtuais atualizou para a versão 6. Mesmo --debug e --verbose não disseram nada útil, apenas "Nenhum teste executado". No final, descobriu-se que classes e namespaces foram alterados na nova versão e ele simplesmente não queria executar os arquivos que continham referências a classes antigas. A solução para mim foi substituir em todos os casos de teste:
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
com:
use PHPUnit\Framework\TestCase; class MyTestCase extends TestCase {...}
fonte
Sei que isso é muito antigo, mas também aconteceu comigo. Espero que isso ajude alguém.
Meu problema é que esqueci o símbolo '@' em / ** @test * /
ERRADO:
/** test */ function a_thread_can_be_deleted() { ... }
DIREITO:
/** @test */ function a_thread_can_be_deleted() { ... }
fonte
@return void
e não contém '@test', que é o motivo pelo qual o phpunit não conseguiu identificar como um teste.Eu puxei meu cabelo por 10 minutos antes de decidir usar --debug (bom caminho a seguir) para descobrir o simples fato de que o nome do arquivo não respeitava a convenção de nomenclatura , eu tinha um "s" extra no final .
errado
direito
espero que esta nota possa ajudar alguém
fonte
Você só precisa ligar para o arquivo do fornecedor
vendor\bin\phpunit
Aviso \ Não /fonte
Em vez de executar o phpunit
usar
vendor \ bin \ phpunit
fonte
Cheguei atrasado à festa, mas esta informação pode ajudar outras pessoas.
As soluções acima não funcionaram para mim. A partir do Laravel 7.x, por padrão, o PHPUnit executa apenas arquivos PHP com o sufixo "Test.php". Por exemplo, se você criar um teste, nomeá-lo
CreateUser
não funcionará, mas nomeá-loCreateUserTest
funcionará.Para superar a limitação, vá até
phpunit.xml
e modifique osuffix
atributo dosdirectory
elementos:... <testsuite name="Unit"> <!-- modify suffix --> <directory suffix=".php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <!-- modify suffix --> <directory suffix=".php">./tests/Feature</directory> </testsuite> ...
Isso instruirá o PHPUnit a executar todos os arquivos com
.php
extensão dos diretórios. Nota para limpar o cache do aplicativo após a atualizaçãophpunit.xml
:Informações adicionais sobre a configuração XML do PHPUnit podem ser encontradas aqui: https://phpunit.de/manual/6.5/en/appendixes.configuration.html
fonte
se você estiver usando PHPSTORM vá para Configurações e vá para
Test Frameworks
e clique em + e escolha
PHPUnit Local
entãoUse Composer Auto Loader
em seguida, cole como no caminho para o campo de scriptC:\{YOUR PROJECT NAME}\vendor\autoload.php
Clique OK
HAPPY TESTING
fonte
Verifique o arquivo phpunit.xml , olhe dentro dos conjuntos de testes.
Minha versão do phpunit (2019) está procurando por arquivos terminados em (sufixo) * Test.php. Portanto, certifique-se de que todos os arquivos de teste estão nomeados corretamente (ex .: BookTest.php está correto, BookTests.php não, BookTestCase.php não).
fonte
Você adicionou um conjunto de testes ao arquivo phpunit.xml?
<phpunit> <testsuite name="app1" > <directory>./</directory> </testsuite> </phpunit>
Você pode adicionar vários diretórios lá.
fonte
Time: 28 ms, Memory: 1.50Mb No tests executed!
Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!
. Definitivamente, funciona quando eu faço referência manualmente, ele simplesmente não gosta de carregar do arquivo de configuração por algum motivo :(Os nomes das funções no arquivo de teste devem ser prefixados com
test
ou deve haver um comentário adicionado antes da função/** @test */
Certifique-se de que não é
/* @test */
porque isso não funciona. deve haver dois asteriscos após a barra, não um.
fonte
Para mim, usar phpunit --debug me mostrou qual teste não estava executando, dentro,
$this->visit('/') ->see('Laravel');
e acho que, como o diretório estava protegido com autenticação .htaccess, não conseguiu acessar a página
A solução para mim foi fazer este teste (ou provavelmente tirar a autenticação .htaccess)
fonte
É muito tarde, mas espero que ajude alguém.
Eu tenho meus testes para executar usando uma referência absoluta. estrutura da pasta [projeto / testes / test.php]
minha linha de diretório se parecia com isto ./tests/test.php
fonte
Um pouco na lateral talvez, mas se você está (como eu) usando o Laravel no Vagrant, certifique-se de que está executando o phpunit dentro da caixa do vagrant e não no "lado do windows". :)
fonte
Eu tive o problema de nenhum teste sendo executado, mesmo quando as coisas estavam configuradas corretamente.
A causa era que o namespace não era o primeiro comando do arquivo, era depois de alguns comentários do bloco de documentos.
reverter fez com que o phpunit visse os testes e rodasse corretamente.
fonte
O meu foi um pouco engraçado.
Quando eu usei
php artisan make:test
acidentalmente coloquei .php likeProductRewardPointController.php
which createdProductRewardPointController.php.php
e phpunit simplesmente ignorei.Acabei de deletar o .php extra e as coisas voltam ao normal
fonte
Eu tive o mesmo problema de Nenhum teste executado! , resolvido mantendo o mesmo nome de arquivo e nome de classe .
fonte
Se você estiver usando IDEs como JetBrains PHPStorm , observe também que: na
Run/Debug Configurations
janela, oTest scope
precisa ser definidodirectory
e apontar esse diretório para onde seutests
pasta está localizada.Levei apenas meia hora para descobrir que esqueci de definir o diretório. Você pode usar global
phpunit.phar
, desde que defina o escopo do teste e o diretório corretamente, o IDE cuidará de outras coisas para você.fonte
usar o console de cmd resolveu esse problema passando no teste de caminho interno
Eu não encontrei outra maneira de fazer isso não funciona dessa forma
Espero que tenha sido útil para alguém
fonte
phpunit --debug ./