如何使用phpunit对在测试类的构造函数中调用的方法进行单元测试

时间:2017-11-02 14:51:32

标签: php unit-testing phpunit

我有一个班级Version,我想对isValidVersionString()方法进行单元测试。

use InvalidArgumentException;

class Version
{
    /**
     * dot separated representation of the version
     * @var string
     */
    protected $versionString;

    public function __construct($value)
    {
        $this->setVersionString($value);
    }

    /**
     * @return string
     */
    public function getVersionString(): string
    {
        return $this->versionString;
    }

    /**
     * @param string $versionString
     *
     * @return Version
     */
    public function setVersionString(string $versionString)
    {
        if(!$this->isValidVersionString($versionString)) {
            throw new InvalidArgumentException();
        }
        $this->versionString = $versionString;
        return $this;
    }

    /**
     * valid format is xxx.xxx.xxx.xxx, with xxx not larger than 255
     * @param string $value
     * @return bool
     */
    public function isValidVersionString(string $value): bool
    {
        //todo: implementation
    }
}

我如何构建此单元测试?因为这个方法也是通过构造函数调用的。

1 个答案:

答案 0 :(得分:0)

您可以使用该类的部分模拟:

class VersionTest extends \PHPUnit_Framework_TestCase
{

    /**
     * @test
     */
    public function itShouldTest()
    {
        /** @var Version|\PHPUnit_Framework_MockObject_MockObject $mock */
        $mock = $this->getMockBuilder(Version::class)
            ->disableOriginalConstructor()
            ->setMethods(['setVersionString','getVersionString'])
            ->getMock();

        $this->assertTrue($mock->isValidVersionString('a-string'));
    }

}

恕我直言,您只需将方法isValidVersionString定义为static,然后按原样进行测试。