1

ユニットテストやその他の方法で手続き型コードをテストする方法はありますか?例えば非OOPをテストするPHP

私は以下の非常に単純なコードを持っている:

$a = 10; 
$b = 20; 

for($i = $a; $i < $b; $i++){ 
    echo 'Loop ' . $i . PHP_EOL; 
} 

私は変数は変数の型を確認することができ、また、存在する場合、私は私ができる出力バッファと、機能にisset()や他のビルドに確認することができることを知っています出力を取得し、ループが何回実行されたかを数えます。 ... forループがないかどうかを確認できますか?whileループですか?

私は完全なPHPファイルを取得することができます正規表現でそれを見つけましたが、多分私にそれを示すいくつかの種類の魔法の機能があります。

+0

特定の種類のループの存在をテストする理由は何ですか?それは問題ではありません。 – ShiraNai7

+0

@ ShiraNai7私は知っているが、使用されているループの種類を知る必要がある。 – rafwlaz

答えて

2

カプセル化が不十分なレガシーファイルの場合、可能な限り最高レベルでテストすることをお勧めします。

このファイルについては、Webサーバーレベルでテストすることは可能ですか?機能テストであり、単体テストではありませんか?すなわち:

    あなたは
  • の上に掲示ファイルを提供していますエンドポイントに要求を行うテストスイート
  • の先頭にウェブサーバを起動
  • 期待通りにコンテンツがLoop ...\n ...で主張しています。

どのようなループが使用されているか、どの変数が使用されているか、変数の設定などは出力をアサートするだけで、テストを保護しながらコードをより簡単にリファクタリングすることができます。出力が期待どおりであることを確認してください。

ウェブサーバ機能テストは、あなたが同様の方法で出力をキャプチャユニットテストを作成することができるかもしれない、不可能な場合:

ob_start(); 
include 'your_php_file_listed_above'; 
$out = ob_get_clean(); 

その後、あなたは$を主張することができますが正しくLoop .. \n ...が含まれています。

リファクタリングが遅くなる可能性があるため、どのループが使用されているか、どの変数が設定されているかといった実装固有の詳細をアサートすることをお勧めします。