2014年5月22日木曜日

fuelphpのユニットテストでNo tests found in class "Fuel\Core\TestCase"が発生する。


fuelphpでユニットテストを実行すると、No tests found in class "Fuel\Core\TestCase"のwarningが発生する。

原因はphpunit.xmlの中でテストケースを指定する際にワイルドカード(*)を使用している場合(デフォルトでそう)、phpunitがPHPUnit_Framework_TestCaseを継承しているクラスを検索するため、この警告が発生する。

いろいろ調べたが解決策は以下の2つ。

1) ファイル名と中のクラス名を完全に一致させる(大文字小文字も含め)

これはないでしょう。ほとんどの場合ファイル名は小文字で統一しているはず(かな)。

2) 直接PHPUnit_Framework_TestCaseを継承する。

Fuel/Core/TestCaseの中身を見てみよう。

namespace Fuel\Core;

/**
 * A Fuel Specific extension of the PHPUnit TestCase.  This will
 * be used for custom functionality in the future.
 */

class TestCase extends \PHPUnit_Framework_TestCase { }

ただの空のクラスだ。

下手にクラスの継承元をFuel\Core\TestCaseにすると、そのクラスがphpunitの検索に引っかかり警告が出るというわけ。

根本的な解決としてはこのFuel\Core\TestCaseをabstractにするのが正しいんだが。一応Fuelの開発チームにIssueであげときました。

2014/07/15 追記
* fuelphp 1.7.2でFuel\Core\TestCaseクラスが抽象クラスになるよう修正が行われました。