Я создал набор сценариев php, которые выполняют ряд операций Memcached, и я написал тесты phpunit для этого набора. Название набора тестов Memcached
и phpunit.xml.dist
Файл выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
<testsuites>
<testsuite name="Memcached">
<directory>./test</directory>
</testsuite>
</testsuites>
</phpunit>
Однако, когда я запускаю этот набор тестов с --testsuite=Memcached
флаг, я получаю следующую ошибку:
PHP Fatal error: Uncaught PHPUnit\Framework\Exception: Class "Memcached" does not extend PHPUnit\Framework\TestCase.
Вероятно, ошибка возникает потому, что php уже имеет класс с именем Memcached
,
Если я переименую тестовый набор в MemcachedTest
в файле XML, и запустите тесты с --testsuite=MemcachedTest
флаг, модульные тесты запускаются и завершаются с нулевыми ошибками.
Я бы лучше назвал набор тестов Memcached
, так как это будет соответствовать форматированию наших других наборов тестов.
Можно ли назвать наборы тестов для phpunit так же, как существующий класс?
Чтобы ответить на ваш вопрос:
Можно ли назвать наборы тестов для phpunit так же, как существующий класс?
да, но только если класс является реализацией набора тестов.
Иначе, нет.
Причина, по которой вы столкнулись с этой проблемой:
Если имя набора тестов является именем существующего класса, экземпляр класса будет создан как набор тестов.
Memcached
это явно не набор тестов PHPUnit.
С другой стороны:
Если набор тестов является просто строкой, пустой
TestSuite
Объект будет создан с заданным именем.
Чтобы решить вашу проблему, дайте тестовому набору имя, которое не является именем класса:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
<testsuites>
<testsuite name="Memcached Tests">
<directory>./test</directory>
</testsuite>
</testsuites>
</phpunit>
Поведение, которое вы испытали, на самом деле задокументировано в PHPUnit\Framework\TestSuite
учебный класс:
/**
* Constructs a new TestSuite:
*
* - PHPUnit\Framework\TestSuite() constructs an empty TestSuite.
*
* - PHPUnit\Framework\TestSuite(ReflectionClass) constructs a
* TestSuite from the given class.
*
* - PHPUnit\Framework\TestSuite(ReflectionClass, String)
* constructs a TestSuite from the given class with the given
* name.
*
* - PHPUnit\Framework\TestSuite(String) either constructs a
* TestSuite from the given class (if the passed string is the
* name of an existing class) or constructs an empty TestSuite
* with the given name.
*
* @param mixed $theClass
* @param string $name
*
* @throws Exception
*/
Ваши тестовые классы должны быть расширены \PHPUnit_Framework_TestCase
учебный класс
<?php
/**
* Class SomeTest.
*/
class SomeTest extends \PHPUnit_Framework_TestCase
{
public function testSomething()
{
// test case
}
}
Посмотреть документ https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html