私はここで、プライベートメソッドとプロパティをテストするためのユニットテストの使用に関するいくつかの質問を読んでいます。私は単体テストに不慣れで、テストがプライベート/保護されたプロパティとメソッドにアクセスできるように、試しているメソッドに入力したいと思います。
私が取り組んでいたテストでは、特定のパラメーターをオブジェクトに渡すと、プロパティが設定されることを確認したかったのです。単体テストの教育に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からのものである場合は、先に進んでプロパティをテスト目的で使用できるようにしますが、そうでない場合はエラーをトリガーします。これにより、プロパティをプライベートに保つことができますが、テストで使用することができます。これは、これから作成する特定のプライベートメソッドでより重要になります。
だから、私の質問は、私はここで本当に悪いものを見逃しているので、このテクニックを避けるべきですか?