0

verifyTextのようなメソッドは失敗の行番号を報告しないため、失敗のポイントを見つけるのが困難になります。

SeleniumIDEPHPUnitエクスポートによって作成されたコードは次のようになります。

try {
    $this->assertEquals($text, $this->getTitle());
} catch (PHPUnit_Framework_AssertionFailedError $e) {
    array_push($this->verificationErrors, $e->toString());
}

この行の出力は、以下の2行目のようになりますが、これは完全に追跡できません。

Failed asserting that '' matches PCRE pattern "/Harlem/".
Failed asserting that two strings are equal.
Failed asserting that '(Pattern A)' matches PCRE pattern "/\(Pattern B\)/".

テキストの失敗を検索できるように参照テキストを含めるように呼び出しを修正しましたが、大規模なテストではこれでは不十分です。コード内の検証の失敗ごとに行番号/スタックトレースを取得するにはどうすればよいですか?

public function verifyTitle($text) {
    $title = $this->getTitle();
    try {
        $this->assertEquals($text, $title);
    } catch (PHPUnit_Framework_AssertionFailedError $e) {
        array_push($this->verificationErrors,
             "Title is '$title' but should be '$text'");
    }
}

注:アサーション用のコードへの参照を返すスタックトレースを取得するために、スタックトレースハックを使用しています

4

1 に答える 1

1

(多すぎる)スタックトレースを含めるために、この検証メソッドを作成しました。

public function appendVerification($message,$e) {
        array_push($this->verificationErrors,$message."\n".$this->dumpStack($e));
}

また、PHPUnitテスト用に参照されているdumpStackメソッドを更新して、クラス名でフレームワーク呼び出しをばかげて削除しました。

protected function dumpStack(Exception $e) {
    $stack = '';
    foreach ($e->getTrace() as $trace) {
        if (isset($trace['file']) &&
                isset($trace['line'])) {
            if (!isFramework($trace['file']))
                $stack .= PHP_EOL .
                        $trace['file'] . ':' .
                        $trace['line'] . ' ';
        }
    }
    return $stack;
}

function isFramework($fileName) {
   $test = ((preg_match("/PHPUnit/i",$fileName) +
           preg_match("/php.phpunit/i",$fileName)) > 0);
   return $test;
}

最終結果、netbeansでクリック可能、PHPUnitフレームワークの行番号なし

Failed asserting that 'waitForElementPresent failed for selector: css=input#address.valid' is false.
C:\dev\Automation_Dev\phpTests\library\SeleniumUtilsTestCase.php:228
C:\dev\Automation_Dev\phpTests\library\SeleniumUtilsTestCase.php:115
C:\dev\Automation_Dev\phpTests\library\SeleniumTestCase.php:176
C:\dev\Automation_Dev\phpTests\usecases\CreateListingTest.php:72
C:\dev\Automation_Dev\phpTests\usecases\CreateListingTest.php:39
C:\dev\Automation_Dev\phpTests\usecases\CreateListingTest.php:23
C:\xampp\php\phpunit:46
于 2012-05-17T18:57:46.653 に答える