无法找到Silverstripe 4 SapphireTest类

时间:2018-03-29 17:11:12

标签: phpunit silverstripe silverstripe-4

我已经从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”类

2 个答案:

答案 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提供程序之前,您可能不会看到任何差异。