2017-08-07 19 views
4

codeigniterでphpunit testを実行していますが、このコードでadmin_test.phpファイルがあります。codeigniterでphpunit testを実行できません。CIが見つかりません。エラー

class Admin_test extends PHPUnit_Framework_TestCase{ 
    private $CI; 

    public function __construct() 
    { 
     // create instance variable 
     $this->CI = &get_instance(); 


    } 


    public function testRenderReturnsHelloWorld(){ 
     $this->CI->load->controller('admin'); 
     $data = $this->admin->render(); 
     $expected = 'Hello World'; 
     $this->assertEquals($expected, $data); 
    } 
} 

phpunitテストを実行すると、このエラーが発生します。

PHP Fatal error: Call to undefined function get_instance() in C:\Users\farhana\Desktop\ci\tests\application\controllers\admin_test.php on line 16 
PHP Stack trace: 
PHP 1. {main}() 

私はPHPUnitのテストを取得するために作曲を使用ので、作曲はここbootstrap.phpのファイル

をロードしているので、他のチュートリアルが仕事を文句を言わない、次は私のphpunit.xmlファイル

<?xml version="1.0" encoding="UTF-8" ?> 
<phpunit bootstrap="./vendor/autoload.php" 
     color = "true" 
     convertErrorsToExpections="true" 
     convertNoticesToExceptions="true" 
     convertWarningsToExpections="true" 
     syntaxCheck="false" 
     > 
    <testsuites> 
     <testsuite name="Unit Tests"> 
      <directory>./tests/application/controllers/admin_test.php</directory> 
     </testsuite> 
    </testsuites> 
</phpunit> 
+0

私はクラスがCI_Controllerを拡張するべきかどうか分からないのですか? – Deblugger

+0

@Deblugger私はphpunitテストを実行しようとしています、それはCI_Controllerを拡張することはできません、どのように単体テストを実行しますか?私はそれにショットを与えることができます – FaF

+0

しかし、もしそれがCI_Controllerを拡張しない場合は、私はCodeigniter関数を使用することはできませんと思います – Deblugger

答えて

0

である私は持っていません。 CIをよく理解していましたが、それを使用したコードベースで作業する機会がありました。事はfunction &get_isntance()system/core/CodeIgniter.phpファイルで定義されていることです。だから(と思われます)、includeという機能を使用することができます(このファイルに含まれる特別なブートストラップファイルとvendor/autoload.phpを作成することができます)。

実際には、そのファイルにはいくつかの定数が既に設定されている(そして、indexファイルのようにいくつかの他のものが行われている)ために、意図しているようです。また、get_instance関数の定義に加えて、side-effects - それはincludeの他のファイル、インスタンス化オブジェクト(独自のジョブも含む)、エラーおよび例外ハンドラの登録、404状況の処理、実行するコンローラとそのメソッドの作成それはフックを呼び出し、それらの間のベンチマークを行います。基本的に、これらのアクションのほとんどは、テストプロセスとは関係なく、単体テストについて話すときには重要です。だから私はそのファイルを含めることは本当に良い考えではないと思う(うまく動くかもしれない - 私はチェックしなかった)。

すべてのCIブートストラップコードを調べて、単体テストを実行して実行するのに適しているすべてのものを抽出します。あるいは、CIベースのコードで単体テストというアイデアを落とし、Codeceptionによって提供されるfunctional/acceptanceテスト(または他の類似ツールの検索)のような、より深く統合的なものを試してみてください。

個人的には、最初の選択肢は、明らかな理由でこのような努力をする価値はないと思います。したがって、CIを実行しなければならない場合、いくつかのテストを行いたいのであれば、内部に潜んでテストするコードの外側の境界に集中するのではなく、より生産的になるでしょう。

(私は、CIベースのコードの実際のユニットテストを完全にカバーし、包括的な検索を行ったとは言えませんが、(トピックのSOトピックについての簡単な検索だけを考えても)問題を解決することができれば、それをやった方法を見るのは面白いだろう。)

関連する問題