0

失敗したときにアサーションの期待値と結果値を表示するように CakePHP TestSuite に強制する方法があるかどうかは誰にもわかりませんか? 典型的な PHPUnit テストでは、デフォルトで出力に表示されますが、Cake の TestSuite (PHPUnit を使用) には表示されません。それとは別に、NetBeans でテスト ケースをデバッグすると、変数の監視を設定しようとするたびにある種のソケット例外が発生します。これは CakePHP テスト ケースでのみ発生し、他のすべてのソース ファイルで正常に動作します。これにも解決策はありますか?

4

2 に答える 2

0

OK、Cake Libraryファイルを更新すると、ソリューションが消去されることをどうにかして解決しました。lib\Cake\TestSuite\Reporter\CakeHtmlReporterファイルを編集してメソッドを変更する必要があります。

public function paintFail($message, $test) 
{
    $trace = $this->_getStackTrace($message);
    $testName = get_class($test) . '(' . $test->getName() . ')';
    echo "<li class='fail'>\n";
    echo "<span>Failed</span>";
    echo "<div class='msg'><pre>" . $this->_htmlEntities($message) . "</pre></div>\n";
    echo "<div class='msg'>" . __d('cake_dev', 'Test case: %s', $testName) . "</div>\n";
    echo "<div class='msg'>" . __d('cake_dev', 'Stack trace:') . '<br />' . $trace . "</div>\n";
    echo "</li>\n";
}

に:

public function paintFail($message, $test) {
    $trace = $this->_getStackTrace($message);
    $testName = get_class($test) . '(' . $test->getName() . ')';

    echo "<li class='fail'>\n";
    echo "<span>Failed</span>";
    echo "<div class='msg'><pre>" . $this->_htmlEntities($message->getComparisonFailure()->toString()) . "</pre></div>\n";
    echo "<div class='msg'>" . __d('cake_dev', 'Test case: %s', $testName) . "</div>\n";
    echo "<div class='msg'>" . __d('cake_dev', 'Stack trace:') . '<br />' . $trace . "</div>\n";
    echo "</li>\n";
}

アサーションが失敗すると、次のような出力が表示されます。

Failed asserting that two arrays are equal.--- Expected
+++ Actual
@@ @@
 Array (
-    0 => 'Crypto3DS'
-    1 => 'Zlib'
+    1 => 'Crypto3DS'
+    2 => 'Zlib'
 )

Cake Yeppie でのテストの高速化 :D

于 2012-10-06T09:46:15.650 に答える
0

http://www.dereuromark.de/2011/12/04/unit-testing-tips-for-2-0-and-phpunit/をチェックして ください

基本的に、TestCase クラスを拡張して、次のような独自の追加メソッドを作成できます。

public function details($is, $expected) {
    echo 'is:' . $is; echo '<br />';
    echo 'expected: ' . $expected; ob_flush();

}

内部的に呼び出すか、失敗時に sth を呼び出します。

または、どこでも debug() するだけです。

于 2012-10-05T12:57:59.420 に答える