我创建了一套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'的测试套件是否可以与现有类名称相同?
答案 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