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 ...
Alvin
fonte
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!

define
fonte
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

shadi
fonte
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 {

}
Jijesh Cherrai
fonte
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 .

Bevan
fonte
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.

Nino Škopac
fonte
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
radeklos
fonte
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.

svirk
fonte
1

Eu uso o ZF2 e trabalho para mim quando substituído 'PHPUnit_Framework_TestCase' por '\ PHPUnit \ Framework \ TestCase'

Alysson Vicuña de Oliveira
fonte
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)

Ricardo Herrero
fonte
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.

piersb
fonte
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!

MorganFreeFarm
fonte
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.

cyberbit
fonte
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

Shankar
fonte