PHP on IIS に PHPUnit をインストールする

まず、pear ってのが何者か分からずに苦労したのでメモ。

私の場合、PHP on IIS のインストール先が C:\PHP5.3 なのでコマンドプロンプトで移動。
その後、pear のアップデート。

# PHPUnit を入れるためには、PEAR 1.9.1 が必要なんですが、手元のは PEAR 1.9.0 なので駄目らしい。

windowsにPHPunit入れる – これでも…
http://d.hatena.ne.jp/aqua1127/20101013/1286948514

のあたりを参考にして、

go-pear channel-update pear.php.net

ここで、system|local と聞かれるので local にする。system にすると、c:\windows\pear.ini を作ろうとして失敗するので、local にして、PHPのインストール先 c:\PHP5.3 に pear.ini を作るようにする。

pear upgrade pear

でアップデート。接続にひどく時間がかかるけど、しばらく経つと繋がる。

お次は、phpunit 本体

go-pear channel-discover pear.phpunit.de

pear install phpunit/PHPUnit

でインストール、install 時に随分待たされるけど、しばらく経つと繋がる。

最後に、install failed なんてメッセージが出たら、適宜インストール…なんですが、よくわからん。

phpunit/DbUnit requires package “channel://pear.symfony-project.com/YAML” (version >= 1.0.2)

な形でエラーが出ると、

go-pear channel-discover pear.symfony-project.com
pear install symfony/YAML

な風にインストールするらしいのですが、パッケージ名はどうやって知るのだろうか?

# ちなみに、symfony/YAML は c:\php5 に入れようとして、c:\php5.3 を見てくれない(多分、ピリオドが邪魔をしている)。なので、一度、c:\php5 フォルダを作ってコピーしました。

後は、よくわからないけど

go-pear channel-discover components.ez.no

pear install components.ez.no/ConsoleTools

をインストールしました。

で、再び

go-pear channel-discover pear.phpunit.de

pear install phpunit/PHPUnit

とするとインストール完了。windows 版の場合は

c:\php5.3\phpunit.bat が作成されます(c:\php5.3 のところは各自のインストール先で)

きちんとインストールできたかどうか、試してみる。

PHPUnitのテスト作成と実行
http://php.nice-777.com/PHPUnit/start.html

を読んで ArrayTest.php を作成してみる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// require_once 'PHPUnit/Framework.php';
class ArrayTest extends PHPUnit_Framework_TestCase
{
    public function testNewArrayIsEmpty()
    {
        // Create the Array fixture.
        $fixture = array();
  
        // Assert that the size of the Array fixture is 0.
        $this->assertEquals(0, sizeof($fixture));
    }
  
    public function testArrayContainsAnElement()
    {
        // Create the Array fixture.
        $fixture = array();
  
        // Add an element to the Array fixture.
        $fixture[] = 'Element';
  
        // Assert that the size of the Array fixture is 1.
        $this->assertEquals(1, sizeof($fixture));
    }
}
?>

どうやら、先頭の PHPUnit/Framework.php はいらないようです。自動的にインポートされます。

あと、phpunit.bat の設定が悪くて php.exe の起動が.\php.exeになっています。
なので、環境変数 PHPBIN に c:\php5.3\php.exe を設定してやります(あるいはパスを通して、php.exe に書き換えるか)。

1
2
3
4
5
6
7
8
9
10
D:\work\blog\src\phpunit>phpunit ArrayTest
PHPUnit 3.5.11 by Sebastian Bergmann.
 
..
 
Time: 1 second, Memory: 3.00Mb
 
OK (2 tests, 2 assertions)
 
D:\work\blog\src\phpunit>

そうすると、めでたく PHPUnit が動きます。

ソースを書き換えて失敗するようにすると、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
D:\work\blog\src\phpunit>phpunit ArrayTest
PHPUnit 3.5.11 by Sebastian Bergmann.
 
.F
 
Time: 0 seconds, Memory: 3.00Mb
 
There was 1 failure:
 
1) ArrayTest::testArrayContainsAnElement
Failed asserting that <integer:1> matches expected <integer:2>.
 
D:\work\blog\src\phpunit\ArrayTest.php:24
 
FAILURES!
Tests: 2, Assertions: 2, Failures: 1.
 
D:\work\blog\src\phpunit>

ちゃんと失敗するので大丈夫そうですね。

~~

余談ですが、

class ArrayTest extends PHPUnit_Framework_TestCase

の継承のところ、このファイル名がちょうど

PEAR/PHPUnit/Framework/TestCase.php

に対応しているのですね。PHP5 から加わった自動でクラスをロードしてくれる機能だと思います(多分)。

カテゴリー: 開発, xUnit パーマリンク

PHP on IIS に PHPUnit をインストールする への1件のコメント

  1. masuda のコメント:

    PEAR って、PHP のインストールシステムなのね。なるほど。
    Perl の ライブラリ群のイメージを持っていたので、ちょっと勘違いしていた。

コメントは停止中です。