0

HTMLを取得し、基本的にHTMLを呼び出し元に返すテンプレートクラスがあります。PHP Unitを使用して発信者をテストするにはどうすればよいですか?私はただassertTrue(is_string(call_function))ですか?ばかげたテストのようで、不適切にテストしているのではないかと思いました。

4

1 に答える 1

0

返されたHTMLは整形式であると想定されていますか?もしそうなら、あなたはそれを検証することができます。

および/または特定のノードまたはテキストの文字列が常に存在することになっている場合は、その存在を確認できます。strpos、正規表現、または適切なDOMパーサーを使用します。

このStackOverflowの質問は、HTMLを解析およびクエリする方法についていくつかのアイデアを提供します。PHPでHTML / XMLをどのように解析および処理しますか?

より一般的には、文字列を返す関数をテストする方法に私が通常アプローチする方法は、次を使用することです。

$html=call_function();
$this->assertEquals("dummy",$html);

それから失敗しますが、正しい出力を教えてくれるので、それを貼り付けます:

$html=call_function();
$expected=<<<EOD
<html>
...
</html>
EOD;
$this->assertEquals($expected,$html);

それが再び失敗した場合、私は次に私が持っている2つの正解の違いを研究します。これが優れた単体テストである場合、それらは実際に異なっている必要がありますか?システムの制御できない側面を置き換えるためにモックオブジェクトを使用しますか?(たとえば、返されるHTMLがグーグル検索結果である場合、モックオブジェクトでグーグルの呼び出しをシミュレートしたいのですが、常にまったく同じ検索結果ページを返します。)

唯一の違いがタイムスタンプである場合、正規表現を使用してそれらをハントアンドデストレートし、常に同じである必要がある文字列を取得することができます。

$html=preg_replace('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/','[TIMESTAMP]',$html);

追加HTML文字列が非常に大きい場合、1つの代替手段は、md5()それを短い文字列に縮小するために使用することです。これでも、何かが壊れたときに警告が表示されますが、(大きな)欠点は、壊れたときにどこにあるかわからないことです。それが心配な場合は、DOMアプローチ(またはその貧弱ないとこである正規表現)を使用して、テストするHTMLのいくつかの重要な部分を選択することをお勧めします。

于 2012-07-19T23:28:54.543 に答える