Я читал здесь несколько вопросов, касающихся использования модульного тестирования для тестирования частных методов и свойств.Я новичок в модульном тестировании и хотел бы получить информацию о методе, который я пытаюсь, чтобы мои тесты могли получить доступ к закрытым / защищенным свойствам и методам.
В тесте, над которым я работал, я хотел подтвердить, что прохождениеопределенный параметр объекта привел к установке свойства.Я использую SimpleTest для обучения юнит-тестированию, и мой метод тестирования выглядит следующим образом:
function test__Construction_Should_Properly_Set_Tables() {
$cv = new CVObject( array( 'tables' => $this->standardTableDef ) );
$tables = $cv->tables;
$this->assertEqual( $tables, $this->standardTableDef );
}
Затем я написал метод __get в CVObject следующим образом:
function __get( $name ) {
$trace = debug_backtrace();
$caller = $trace[1];
$inTesting = preg_match( '/simpletest/', $caller['file'] );
if ( $inTesting ) {
return $this->$name;
} else {
trigger_error( 'Cannot access protected property CVObject::$' .
$name . ' in ' . $trace[0]['file'] . ' on line ' .
$trace[0]['line'],
E_USER_NOTICE );
}
}
Моя идея вДело в том, что если вызывающий файл взят из SimpleTest, сделайте свойство доступным для целей тестирования, но если нет, вызовите ошибку.Это позволяет мне сохранять частную собственность, но я могу использовать ее в тестировании, что будет более важно для меня с определенным частным методом, который я собираюсь начать писать.
Итак, мой вопрос, я что-то упустил здесь очень плохо и должен избегать этой техники?