2

まず、PHPフレームワークとしてcodeigniterを使用しています。これを聞いて申し訳ありませんが、私はユニットテストのアイデアを把握しようとしています。彼らはあなたのサイトの機能を開発する前にユニットテストを行うのは良い習慣だと言いました。だからここで私はこれを学びたいと思っています:

私の方法:

function download()
{
    $data = file_get_contents("resources/temp/file.doc");
    $name = "new_file.doc";

    force_download($name, $data);
}

次に、testDownloadメソッドを使用してテストコントローラーを作成しました。

public function testDownload()
{       
    //Call the controller method
    $this->CI->download();

    //Fetch the buffered output
    $out = output();

    $this->assertFalse(preg_match('/(error|notice)/i', $out));
}

それから私はそれをテストします:phpunit test.phpそして私にこれを与えました:

F[CIUnit] PHP Error: Warning - file_get_contents(resources/temp/file.doc): failed to open stream: No such file or directory File Path: controllers/contract.php (line: 22)


Time: 4 seconds, Memory: 7.50Mb

There was 1 failure:

1) ContractTest::testDownload
Failed asserting that 0 is false.

パスが正しいかどうかをテストしたいだけです。または、ファイルをダウンロードするためのテストスクリプトが本当に必要ですか?申し訳ありませんが、私は混乱しています。

4

2 に答える 2

2

「そのようなファイルまたはディレクトリはありません」の理由:

PHPUnit を使用してテストしている場合、現在の作業ディレクトリは、phpunit を実行しているディレクトリに対して相対的になります。ただし、コードでは、webserver ディレクトリに対して相対的に記述します。

ところで、単体テストでは、作成したコードをテストする必要があります。単体テストで外部リソースをテストすることは、良い考えではないようです。

于 2012-07-16T14:39:19.227 に答える
1

おそらく、0 は単なる偽の値であり、文字通り偽ではなく、assertFalse が === を使用しているためです。代わりに assertEquals などを使用して 0 に対してチェックしてください。

于 2012-07-16T08:41:26.263 に答える