Por que, erro fatal: A classe 'PHPUnit_Framework_TestCase' não foi encontrada em…?


127

Por que estou recebendo esse erro de PHP?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...

9
Você não está fornecendo nenhuma informação.
Pekka

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ê:

require_once 'PHPUnit/Autoload.php';

Obrigado a Phoenix por apontar isso!


14
PHPUnit 3.5 vem com seu próprio carregador automático que possa ajudar a manter as coisas simples: require_once 'PHPUnit/Autoload.php'

1
Concordo que require_once ('PHPUnit / Autoload.php') é a melhor prática.
Paul Maidment

1
Eu não tenho os dois PHPUnit/Autoload.phpe PHPUnit/Framework/TestCase.php, minha pasta é meio que semelhantePHPUnit/Framework/MockObject
Sufendy

4
e agora eu tenho PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Dennis

1
Veja a resposta de @ shadi para PHP 6+ stackoverflow.com/a/42561590/2883328
Dennis

237

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


4
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.
precisa

2
github.com/sebastianbergmann/phpunit/wiki/... é no topo das notas de lançamento, mas eu perdi
Qchmqs

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 namespace
use PHPUnit\Framework\TestCase;

// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {

}

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:

namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}

Enviei um PR bruto para iniciar a conversa para corrigir a documentação .


1
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\TestCase
if (!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.


1
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
Shahadat Hossain Khan

6

Você pode simplesmente instalar o PHPUnit para executar comandos ( https://github.com/sebastianbergmann/phpunit/#php-archive-phar ):

wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit

Executar teste único

E então execute o teste do PHPunit:

phpunit test.php

O conteúdo do arquivo de teste é o seguinte:

<?php

class StackTest extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
    }

    public function testSave()
    {

    }
}

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).

<testsuites>
    <testsuite name="DemoTestSuite">
        <directory suffix="test.php">demo</directory>
    </testsuite>
</testsuites>

O conjunto de testes é executado com os seguintes comandos:

phpunit -c demosuite.xml --testsuite DemoTestSuite

3
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.



0

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)


0

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.

  1. Faça o download do patch "Unified Diff" na parte inferior de https://core.trac.wordpress.org/changeset/40547
  2. 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:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
  3. Salve o diff no diretório acima do seu diretório / includes / - no meu caso, esse era o próprio diretório do Wordpress

  4. 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.


0

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!


0

Para mim, foi porque eu corri

$ phpunit .

ao invés de

$ phpunit

quando eu já tinha um phpunit.xmlarquivo configurado no diretório de trabalho.


0

Estou usando o php 5.6 na janela 10 com a versão zend 1.12 para eu adicionar

require_once 'PHPUnit / Autoload.php';

antes

classe abstrata Zend_Test_PHPUnit_ControllerTestCase estende PHPUnit_Framework_TestCase

trabalhou. Precisamos adicionar esta declaração acima no arquivo ControllerTestCase.php

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.