Symfony2单元测试无法在测试类中实例化类

时间:2015-05-12 15:15:43

标签: php symfony

我正在使用Symfony2并尝试为我的一个类编写一些PHPUnit测试。

这是我在Symfony2测试后到目前为止所做的文档我在Tests目录下创建了一个文件夹myClassTest.php ini it:

<?php

namespace Test\TestBundle\Tests\Template;

use Test\TestBundle\Dto\Template\myTemplate;

class myTemplateTest extends \PHPUnit_Framework_TestCase
{

    public function testMyMethod()
    {
        $test = new myTemplate();
    }
}

这是myTemplate:

<?php
namespace Test\TestBundle\Dto\Template;

use Test\TestBundle\Doctrine\DatabaseRepository;
use Test\TestBundle\Validation\ValidationClass;

class myTemplate
{


    /**
     * @var ValidationClass
     */
    private $validate;

    /**
     * @var DatabaseRepository
     */
    private $db;

    /**
     * @param ValidationClass $validation
     * @param DatabaseRepository $databaseRepository
     */
    public function __construct(
        ValidationClass $validation,
        DatabaseRepository $databaseRepository
    ) {
        $this->validate = $validation;
        $this->db = $databaseRepository;
    }
}

错误:

 Argument 1 passed to Test\TestBundle\Dto\Template\myTemplate::__construct() 
must be an instance of Test\TestBundle\Validation\ValidationClass, string given, 
called in Dev/project/src/Test/TestBundle/Tests/Template/myTemplateTest.php

更多错误:

此错误指向构造$ validation

中的注入服务
Dev/project/src/Test/TestBundle/Dto/Template/myTemplate.php:42

此错误对应于myTemplate类的实例化类

Dev/project/src/Test/TestBundle/Tests/Dto/Template/myTemplateTest.php:15

我认为我的错误很好,但我不知道如何修复它,当我运行phpunit测试时会显示这些错误。

1 个答案:

答案 0 :(得分:0)

对于使用PHPUnit进行测试,您应该在依赖类中使用Mocks和Stubs来模仿逻辑。

在测试用例中初始化myTemplate之前,您应该创建一个这个对象的模拟,或者创建原始对象。

$validationMock = $this->getMock('ValidationClass');
$dbRepositoryMock = $this->getMock('DatabaseRepository');

$myTemplate = new myTemplate($validationMock, $dbRepositoryMock);

之后可以使用调用系统来控制被称为方法。

有关更多信息,请访问PHPUnit网站: https://phpunit.de/manual/current/en/test-doubles.html