ユースケース:私は、各テストケースを実行するユニットテストフレームワークの診断テストを作成しようとしていますが、まだパブリックメソッドのリストを返しています。テストケース。アイデアは、それぞれのパブリックメソッドが少なくとも1つの単体テストでテストされていることを確認することによってテストカバレッジを向上させることです。PHPで以前のメソッド呼び出しをトレースする
問題:クラスのメソッドが呼び出されたかどうかを検出できません。私はdebug_backtrace()関数を使ってみましたが、テストされているクラスメソッドではなく、テストフレームワークからの呼び出しのみを返します。私が実行されているメソッド名を取得できる唯一の方法は、テストクラスのメソッドにdebug_backtrace()関数を実際に配置することです。これは、すべてのクラスのすべてのパブリックメソッドにそれを持たなければならないため、容認できないオプションです。
テストされたクラスメソッドを取得するためにバックトレースを実行する別の方法はありますか?あるいは、少し異なるアプローチでは、呼び出されているすべてのメソッドを記録するリスナーを開始および停止する方法があります(私は属していないものを解析できます)。
擬似コード:
runTest($testName){
//run the test
//get all recent classes and methods used
//parse out test framework info
//compare used public methods to public method list for the tested class
}
または:
runTest($testName){
//start listener
//run the test
//close listener, get all recent classes and methods used
//parse out test framework info
//compare used public methods to public method list for the tested class
}
"考えられるのは、それぞれのパブリックメソッドが少なくとも1つの単体テストでテストされていることを確認することでテストカバレッジを向上させることです。 ---私はこのメトリックが有用な何かを表しているとは思わない。他の(phpunit)のテストフレームワークのようにxdebugを使用してみませんか? – zerkms
@zerkms - メトリックが有用ではないと思われる理由を説明できますか?要点は、メソッドが少なくとも1つの単体テストを持つことによって完全にカバーされていることを意味するのではなく、どのパブリックメソッドが*どのカバレッジも持たないことを指摘することを意味します。 xdebugに関しては、私がする必要がなければ、ユーザーに追加の拡張機能をインストールさせたくないのです。 – VirtuosiMedia
「任意の呼び出し」は私にとって有用な指標ではありません。メソッドの長さは100行ですが、1%でカバーされます( 'if($ bla)return;')。 – zerkms