Execute seus testes através da linha de comando phpunit. Carrega as classes necessárias.
Halfstop
Você também pode usar a resposta da seguinte resposta stackoverflow.com/questions/42811164/… para manter seu código compatível com o PHPUnit 6 e com as versões anteriores.
Robson
Respostas:
73
A documentação do PHPUnit diz que costumava incluir / exigir o PHPUnit / Framework.php, da seguinte maneira:
require_once ('PHPUnit/Framework/TestCase.php');
ATUALIZAR
A partir do PHPUnit 3.5, há uma classe interna de carregador automático que tratará disso para você:
Para aqueles que chegaram aqui após atualizar o phpunit para a versão 6 ou superior, lançada em 03-02-2017 (por exemplo, com o compositor), você pode estar recebendo este erro porque o código do phpunit agora está no namespace (verifique o registro de alterações ).
Você precisará refatorar coisas como \PHPUnit_Framework_TestCasea\PHPUnit\Framework\TestCase
Obrigado, tive esse problema devido ao Travis CI usando a versão mais recente do PHPUnit em suas versões do PHP 7. Minha correção foi baixar manualmente um phar velho e usá-lo.
Obrigado gentilmente, bom senhor. Estou de fato chegar aqui depois de fazer o upgrade para a versão 6.
h4ckNinja
Eu estava ficando muito irritado porque meus testes de repente pararam de funcionar. Fiz uma atualização do compositor e ela atualizou minha unidade PHP para 6.1. Obrigado.
precisa saber é o seguinte
38
Para uma versão superior do phpunit, como 6.4,
você deve usar o espaço de nome PHPUnit \ Framework \ TestCase
use TestCase em vez PHPUnit_Framework_TestCase
// use the following namespaceusePHPUnit\Framework\TestCase;// extend using TestCase instead PHPUnit_Framework_TestCaseclassSampleTestextendsTestCase{}
Excelente isso funcionou para mim, pois eu estava seguindo um tutorial antigo
você acabou de copiar a resposta do shadi
Adam
@ Adam quem é shadi?
você precisa saber é o seguinte
Eu não sei disso. Eu tenho mesmo erro, então eu explorar resposta por quebrar o pacote
Jijesh Cherrai
13
Você pode receber esse erro porque colocou o nome no arquivo. Nesse caso, você precisará especificar que PHPUnit_Framework_TestCase está no espaço de nomes global, precedendo-o com uma barra invertida:
Sim, se você fez isso: class YourNiceTest extends PHPUnit_Framework_TestCasebasta adicionar o \ na frente da classe estendida, como em class YourNiceTest extends \PHPUnit_Framework_TestCase- Isso funcionou para mim, usando Symfony 2.8e incluindo o phpunitarquivo do compositor baixado como uma dependência local com"phpunit/phpunit": "^4.8"
Xavi Montero
12
Eu estava executando testes do PHPUnit no PHP5 e, então, também precisava oferecer suporte ao PHP7. Isto é o que eu fiz:
No compositer.json:
"phpunit/phpunit":"~4.8|~5.7"
No meu arquivo de inicialização PHPUnit (no meu caso /tests/bootstrap.php):
// PHPUnit 6 introduced a breaking change that// removed PHPUnit_Framework_TestCase as a base class,// and replaced it with \PHPUnit\Framework\TestCaseif(!class_exists('\PHPUnit_Framework_TestCase')&& class_exists('\PHPUnit\Framework\TestCase'))
class_alias('\PHPUnit\Framework\TestCase','\PHPUnit_Framework_TestCase');
Em outras palavras, isso funcionará para testes escritos originalmente para o PHPUnit 4 ou 5, mas também precisam funcionar no PHPUnit 6.
esta solução importante se você quiser para não tocar código Civi \ Test, mas precisa compatível com o mais recente teste de unidade namespace baseado em PHP
Configuração do conjunto de testes: demosuite.xml. demoé o diretório que contém todos os testes. Os arquivos de teste devem ser nomeados como *_test.php( suffix).
Isso não funciona mais porque o PHPUnit mais recente não suporta mais nomes de classes antigas, como PHPUnit_Framework_TestCase. Você realmente precisa usar... extends PHPUnit\Framework\TestCase
Mikko Rantalainen
Apenas dizendo que eu tinha que primeiro mv phpunit /usr/local/bin/phpunite depois sudo chmod +x /usr/local/bin/phpunit. Definir o arquivo como executável antes de movê-lo nunca funcionou no Vagrant Ubuntu. Não sei por que ... Mas, caso alguém esteja lutando com isso, espero que isso ajude.
George Mylonas 12/12
4
Suposição:
Phpunit (3.7) está disponível no ambiente do console.
Açao:
Digite o seguinte comando no console:
SHELL> phpunit "{{PATH TO THE FILE}}"
Comentários:
Você não precisa incluir nada nas novas versões do PHPUnit, a menos que não queira executar no console. Por exemplo, executando testes no navegador.
Se você tem Centos ou outra distribuição Linux, você precisa instalar o pacote phpunit, fiz isso com o yum install phpunit e funcionou. Talvez você precise adicionar um repositório, mas acho que ele deve funcionar bem com os padrões (eu tenho o CentOS 7)
Pode ser que você esteja executando os testes principais do WordPress e tenha atualizado recentemente o seu PhpUnit para a versão 6. Se for esse o caso, a alteração recente no namespacing no PhpUnit quebrará seu código.
Felizmente, há um patch para os testes principais em https://core.trac.wordpress.org/changeset/40547, que resolverá o problema. Também inclui alterações no travis.yml, que você pode não ter na sua instalação; se for esse o caso, será necessário editar o arquivo .diff para ignorar o patch do Travis.
Salve o diff no diretório acima do seu diretório / includes / - no meu caso, esse era o próprio diretório do Wordpress
Use a ferramenta de correção Unix para corrigir os arquivos. Você também precisará remover as primeiras barras para passar de uma estrutura de diretório absoluta para uma relativa. Como você pode ver no ponto 3 acima, existem cinco barras antes do diretório de inclusão, das quais um sinalizador -p5 se livrará.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
Depois disso, meus testes foram executados corretamente novamente.
AVISO: Command php bin/console generate:doctrine:crudtambém criam TestControllerem src/Testsque ele possa jogar de erro quando você tentou iniciar o servidor se você não tem UnitTests. Remova o arquivo, conserte-o!
Respostas:
A documentação do PHPUnit
diz quecostumava incluir / exigir o PHPUnit / Framework.php, da seguinte maneira:ATUALIZAR
A partir do PHPUnit 3.5, há uma classe interna de carregador automático que tratará disso para você:
Obrigado a Phoenix por apontar isso!
fonte
require_once 'PHPUnit/Autoload.php'
PHPUnit/Autoload.php
ePHPUnit/Framework/TestCase.php
, minha pasta é meio que semelhantePHPUnit/Framework/MockObject
PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Para aqueles que chegaram aqui após atualizar o phpunit para a versão 6 ou superior, lançada em 03-02-2017 (por exemplo, com o compositor), você pode estar recebendo este erro porque o código do phpunit agora está no namespace (verifique o registro de alterações ).
Você precisará refatorar coisas como
\PHPUnit_Framework_TestCase
a\PHPUnit\Framework\TestCase
fonte
Para uma versão superior do phpunit, como 6.4, você deve usar o espaço de nome PHPUnit \ Framework \ TestCase
use TestCase em vez PHPUnit_Framework_TestCase
fonte
Você pode receber esse erro porque colocou o nome no arquivo. Nesse caso, você precisará especificar que PHPUnit_Framework_TestCase está no espaço de nomes global, precedendo-o com uma barra invertida:
Enviei um PR bruto para iniciar a conversa para corrigir a documentação .
fonte
class YourNiceTest extends PHPUnit_Framework_TestCase
basta adicionar o \ na frente da classe estendida, como emclass YourNiceTest extends \PHPUnit_Framework_TestCase
- Isso funcionou para mim, usandoSymfony 2.8
e incluindo ophpunit
arquivo do compositor baixado como uma dependência local com"phpunit/phpunit": "^4.8"
Eu estava executando testes do PHPUnit no PHP5 e, então, também precisava oferecer suporte ao PHP7. Isto é o que eu fiz:
No compositer.json:
No meu arquivo de inicialização PHPUnit (no meu caso
/tests/bootstrap.php
):Em outras palavras, isso funcionará para testes escritos originalmente para o PHPUnit 4 ou 5, mas também precisam funcionar no PHPUnit 6.
fonte
Você pode simplesmente instalar o PHPUnit para executar comandos ( https://github.com/sebastianbergmann/phpunit/#php-archive-phar ):
Executar teste único
E então execute o teste do PHPunit:
O conteúdo do arquivo de teste é o seguinte:
Executar suíte de testes
Configuração do conjunto de testes: demosuite.xml.
demo
é o diretório que contém todos os testes. Os arquivos de teste devem ser nomeados como*_test.php
(suffix
).O conjunto de testes é executado com os seguintes comandos:
fonte
PHPUnit_Framework_TestCase
. Você realmente precisa usar... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
e depoissudo chmod +x /usr/local/bin/phpunit
. Definir o arquivo como executável antes de movê-lo nunca funcionou no Vagrant Ubuntu. Não sei por que ... Mas, caso alguém esteja lutando com isso, espero que isso ajude.Suposição:
Açao:
Digite o seguinte comando no console:
Comentários:
Você não precisa incluir nada nas novas versões do PHPUnit, a menos que não queira executar no console. Por exemplo, executando testes no navegador.
fonte
Eu uso o ZF2 e trabalho para mim quando substituído 'PHPUnit_Framework_TestCase' por '\ PHPUnit \ Framework \ TestCase'
fonte
Se você tem Centos ou outra distribuição Linux, você precisa instalar o pacote phpunit, fiz isso com o yum install phpunit e funcionou. Talvez você precise adicionar um repositório, mas acho que ele deve funcionar bem com os padrões (eu tenho o CentOS 7)
fonte
Pode ser que você esteja executando os testes principais do WordPress e tenha atualizado recentemente o seu PhpUnit para a versão 6. Se for esse o caso, a alteração recente no namespacing no PhpUnit quebrará seu código.
Felizmente, há um patch para os testes principais em https://core.trac.wordpress.org/changeset/40547, que resolverá o problema. Também inclui alterações no travis.yml, que você pode não ter na sua instalação; se for esse o caso, será necessário editar o arquivo .diff para ignorar o patch do Travis.
Edite o arquivo do patch para remover a parte Travis do patch, se você não precisar. Exclua da parte superior do arquivo até logo acima desta linha:
Salve o diff no diretório acima do seu diretório / includes / - no meu caso, esse era o próprio diretório do Wordpress
Use a ferramenta de correção Unix para corrigir os arquivos. Você também precisará remover as primeiras barras para passar de uma estrutura de diretório absoluta para uma relativa. Como você pode ver no ponto 3 acima, existem cinco barras antes do diretório de inclusão, das quais um sinalizador -p5 se livrará.
Depois disso, meus testes foram executados corretamente novamente.
fonte
AVISO: Command
php bin/console generate:doctrine:crud
também criamTestController
emsrc/Tests
que ele possa jogar de erro quando você tentou iniciar o servidor se você não temUnitTests
. Remova o arquivo, conserte-o!fonte
Para mim, foi porque eu corri
ao invés de
quando eu já tinha um
phpunit.xml
arquivo configurado no diretório de trabalho.fonte
Estou usando o php 5.6 na janela 10 com a versão zend 1.12 para eu adicionar
antes
trabalhou. Precisamos adicionar esta declaração acima no arquivo ControllerTestCase.php
fonte