PHP CodeIgniter フレームワークを使用してアプリケーションを作成しています。拡張子PHPUnitで、CI_Unitを使用してアプリケーションをテストしようとしています。モデルをテストするために、PHPUnit ドキュメントで定義されている YAML データ プロバイダーを読み込もうとしていますが、エラーが発生します。データ プロバイダー オブジェクトをごまかすと、別のエラーが発生します。通常の PHP 配列を提供すると、期待どおりに動作します。
私は何を間違っていますか?これを行う正しい方法は何ですか?以下は私の結果です:
PHPUnit_Extensions_Database_DataSet_YamlDataSet
以下の Yaml ファイルのオブジェクトを返すと、次のようになります。
データセット「クライアント」が無効です。
によって返されたオブジェクトをループしてPHPUnit_Extensions_Database_DataSet_YamlDataSet
それを返すと、次のエラーが発生します。
PHPUnit_Framework_Exception: 「models.php」も「models.php」も開けませんでした。/Users/eric/pear/share/pear/PHPUnit/Util/Skeleton/Test.php の 100 行目
通常の PHP 配列を指定すると、テストは問題なく実行されます。テストを実行するために使用するコマンドは次のとおりです。
phpunit モデル
以下は私の YAML ファイルの例です。
Clients:
1:
client_id: 1
client_information: "info number 1"
client_key: 48fb10b15f3d44a09dc82d
2:
client_id: 2
client_information: "info number 2"
client_key: 48fb10b15f3d44addd
PHP 5.3、PHPUnit 3.6.10、DBUnit 1.1.2、CodeIgniter 2.1.0、および CI 2.1.0 に関連付けられた CI_unit を使用しています。
編集: 私の models/Test.php ファイルが添付されています:
/**
* test_add_client
* @dataProvider add_client_provider
*/
public function test_add_client($client_id,$company_id,$software_id,$client_information,$client_key)
{
$data = array('software_id' => $software_id,
'client_information' => $client_information,
'client_key' => $client_key);
try {
$id = $this->_m->add_client($company_id,$data);
$this->assertEquals(true, is_int($id));
} catch (Exception $e){
$this->assertEquals(true,false);
}
}
public function add_client_provider()
{
$result = new PHPUnit_Extensions_Database_DataSet_YamlDataSet(
dirname(__FILE__)."/../fixtures/Clients.yml");
// Case #1 returns this $result
//return $result;
foreach($result as $key => $value){
if($key == 'Clients'){
$substructure = $value;
}
}
// Case #2 return the inner structure that is the table
return $substructure;
// Case #3 return an array of arrays
$data = array(
array(1,1,1,'test','text 2'),
array(1,2,1,'test 3', 'test 3'));
return $data;
}