Как выполнить юнит-тест метода, который вызывается в конструкторе тестируемого класса с помощью 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
}
}

Как я могу построить этот юнит-тест? Потому что этот метод также вызывается через конструктор.

2

Решение

Вы можете использовать частичный макет класса:

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 и просто проверить как есть.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector