phpunit - testsuite的名称可以与现有类相同吗?

时间:2017-12-30 00:51:44

标签: php unit-testing class phpunit test-suite

我创建了一套php脚本,它们执行了许多“Memcached”操作,我已经为这个套件编写了phpunit测试。测试套件的名称为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. 标志运行此测试套件时,收到以下错误:

Memcached

错误可能是因为php已经有一个名为MemcachedTest的类。

如果我将测试套件重命名为XML文件中的--testsuite=MemcachedTest,并使用Memcached标志运行测试,则单元测试运行并完成,零错误。

我更愿意将测试套件命名为{{1}},因为这与我们其他测试套件的格式相匹配。

'phpunit'的测试套件是否可以与现有类名称相同?

2 个答案:

答案 0 :(得分:2)

回答你的问题:

  

可以为'phpunit&#39;测试套件被命名为现有的类?

,但前提是该类是测试套件实现。

否则,

您遇到此问题的原因是:

  

如果测试套件名称是现有类的名称,则该类将被实例化为测试套件。

Memcached显然不是PHPUnit测试套件。

另一方面:

  

如果测试套件只是一个字符串,则将使用给定名称创建一个空的TestSuite对象。

要解决您的问题,请为测试套件指定一个不是类名的名称:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
    <testsuites>
        <testsuite name="Memcached Tests">
            <directory>./test</directory>
        </testsuite>
    </testsuites>
</phpunit>

您所经历的行为实际上是documented in the PHPUnit\Framework\TestSuite class

/**
 * 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
 */

答案 1 :(得分:0)

您的测试类需要扩展\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