我在这里阅读了一些关于使用单元测试来测试私有方法和属性的问题。我是单元测试的新手,想输入我正在尝试的方法,以便我的测试可以访问私有/受保护的属性和方法。
在我正在进行的测试中,我想确认将特定参数传递给对象会导致设置属性。我正在使用 SimpleTest 进行单元测试教育,我的测试方法如下:
function test__Construction_Should_Properly_Set_Tables() {
$cv = new CVObject( array( 'tables' => $this->standardTableDef ) );
$tables = $cv->tables;
$this->assertEqual( $tables, $this->standardTableDef );
}
然后我在CVObject中写了一个__get方法如下:
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,请继续并使该属性可用于测试目的,但如果不是,则触发错误。这使我可以将属性保持为私有,但能够在测试中使用它,这对于我即将开始编写的特定私有方法而言将变得更加重要。
所以,我的问题是,我是否错过了一些非常糟糕的东西,应该避免这种技术?