我已经从SilverStripe 3升级到4,现在我的phpUnit测试自己没有运行,因为他们找不到我的任何自定义类。
自动装带器或其他东西必须缺少某些东西。
我有一个像这样的简单测试
use SilverStripe\Dev\SapphireTest;
class EntityTest extends SapphireTest
{
var $Entity;
function setUp()/* The :void return type declaration that should be here would cause a BC issue */
{
parent::setUp(); // TODO: Change the autogenerated stub
$this->Entity = new \My\API\Client\Model\Entity();
}
function testMethods(){
$this->assertMethodExist($this->Entity,'setName');
}
function assertMethodExist($class, $method) {
$oReflectionClass = new ReflectionClass($class);
assertThat("method exist", true, $oReflectionClass->hasMethod($method));
}
}
当我跑步时,我得到: $ php vendor / phpunit / phpunit / phpunit mysite / tests / EntityTest.php
致命错误:未找到“SilverStripe \ Dev \ SapphireTest”类
答案 0 :(得分:2)
我在SilverStripe 4.1中遇到了类似的问题,这是我发现的(并已解决)。
1)从4.1开始,您需要使用--prefer-source而不是--prefer-dist来获取测试代码。现在,分布式软件包中省略了测试代码,请参阅https://github.com/silverstripe/silverstripe-framework/issues/7845
2)phpunit必须在版本^ 5.7的require-dev中 - 我有一个不同的值,这是自动加载问题的原因。
我已经创建了一个测试模块供参考,请参阅https://github.com/gordonbanderson/travistestmodule
干杯
戈登
答案 1 :(得分:0)
你可能错过了测试引导。 SS4仍然依赖于SilverStripe类清单来注册可用的类(不仅仅是PSR-4自动加载器),因此您需要包含它。尝试以下任何一种:
$ vendor/bin/phpunit --bootstrap vendor/silverstripe/framework/tests/bootstrap.php mysite/tests
或在根项目中创建phpunit.xml
文件:
<phpunit bootstrap="vendor/silverstripe/framework/tests/bootstrap.php" colors="true">
</phpunit>
您也可以使用CMS模块中的等效文件,但在开始将测试套件集成到CI提供程序之前,您可能不会看到任何差异。