Вы тестируете частную собственность объекта, которую, как правило, следует избегать, потому что это внутренняя часть устройства, и вам не следует об этом беспокоиться.
Если вашему юниту нужно проверить значения этого класса, вполне вероятно, что какое-то значение должно быть проверено.
Таким образом, вы можете заключить логику проверки в свою собственную единицу, например, валидатор:
class FooValueValidator implements Validator {
/**
* @var string
*/
private $value;
/**
* @var string
*/
private $regex = '/[0-9]{2}:[0-9]{2}:[0-9]{2}/';
public function __construct($value) {
$this->value = $value;
}
/**
* @return bool
*/
public function isValid() {
if (is_null($this->value)) {
return TRUE;
}
if (!is_string($this->value)) {
return FALSE;
}
$result = preg_match($this->pattern, $this->value);
if (FALSE === $result) {
throw new Exception(sprintf('Regular expression failed.'));
}
return (bool) $result;
}
}
Затем вы можете написать юнит-тесты для валидатора. Затем вы знаете, что ваш валидатор работает, и вы можете использовать его везде, где захотите.
class Test {
private $_optionalValue = null;
/**
* @var Validator
*/
private $_validator;
public function __construct(Validator $validator) {
$this->_validator = $validator;
}
function setValue(String $optionalValue)
{
if (!$this->validator->isValid($optionalValue)) {
throw new InvalidArgumentException(sprintf('Invalid value "%s".', $optionalValue));
}
$this->_optionalValue = $optionalValue;
}
}