Я читал здесь несколько вопросов, касающихся использования модульного тестирования для тестирования частных методов и свойств. Я новичок в модульном тестировании и хотел бы получить информацию о методе, который я пытаюсь, чтобы мое тестирование могло получить доступ к частным / защищенным свойствам и методам.
В тесте, над которым я работал, я хотел подтвердить, что передача определенного параметра к объекту, в результате чего было установлено свойство. Я' m использую 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, продолжайте и сделать свойство доступным для целей тестирования, но в противном случае вызвать ошибку. Это позволяет мне сохранить частную собственность, но иметь возможность использовать ее при тестировании, что будет для меня более важным с конкретным частным методом, который я собираюсь начать писать.
Итак, мой вопрос: я здесь не хватает чего-то действительно плохого, и следует избегать этого метода?