phpunit — может ли название testsuite совпадать с существующим классом?

Я создал набор сценариев 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 так же, как существующий класс?

1

Решение

Чтобы ответить на ваш вопрос:

Можно ли назвать наборы тестов для 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
*/
2

Другие решения

Ваши тестовые классы должны быть расширены \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

0

По вопросам рекламы [email protected]