PHPUnit: iddia değerlerin gücü göstergesi

6 Cevap php

When in PHPUnit test fails, actual and expected values are displayed.
But when the test passes, this information is not displayed.

Her zaman beklenen ve gerçek iddianın sonucu görüntülemek için phpunit zorlamak nasıl?

6 Cevap

Büyük olasılıkla ile onaylamaları çağrısında konum beri $this->assert...(), sadece test halinde bu yöntemleri üzerine yazabilirsiniz. Hızlı bir örnek:

class YourTestCase extends PHPUnit_Framework_TestCase {
    ...
    static private $messages = array();
    ...
    static public function assertSame($var1, $var2, $message = '') {
        parent::assertSame($var1, $var2, $message);
        // assertSame() throws an exception if not true, so the following
        // won't occur unless the messages actually are the same
        $success = print_r($var1, true) . ' is the same as '
                 . print_r($var2, true);
        self::$messages = array_merge(self::$messages, array($success));
    }

    static public function tearDownAfterClass() {
        echo implode("\n", self::$messages);
    }
}

Tabii ki, tearDownAfterClass() sizin beğeninize için yeterince geç olmayabilir. Bir onaylama işlemi hatası olurdu gibi aynı değil.

koşu

phpunit --testdox

Her test ismini gösterecektir. Yani geçici bir çözüm olarak, belki hala sadece bir çözüm var ... test adı içine tahmini ve fiili iddia sonuçlarını dahil olabilir ...

I came to this post looking for something similar. I have this testcase:

/**
 * test routing logic (numbers method returns an array of numbers and expected outputs to test)
 * @dataProvider numbers
 */
function testRoute($input,$expected)
{
   $route = new Route($input,'',false);
   $route->route();
   $this->assertEquals($expected,$route->routingResult);
}

ve benim sayılar yöntem şudur:

/**
 * read pairs of numbers (input <tab> expected) from tests.input separater by tab
 * return an array like this: array(array(number1,expected1), array(number2,expected2), ...)
 * provide this array to my tests by returning it
 */
function numbers()
{
    $testcases = file('tests.input');
    $tests = array();
    foreach($testcases as $test_case)
    {
        list($input,$output) = explode("\t",$test_case,2);
        $tests[] = array(trim($input),trim($output));
    }
    return $tests;
}

Ne olur sen PHPUnit bu gibi bir çıktı elde edilir:

 Starting test 'RouteTest::testRoute with data set #0 ('8596000000', 'rejected (dp not found)x')'.
 F
 Starting test 'RouteTest::testRoute with data set #1 ('8596000001', 'rejected (rejected by scheme)')'.
 .
 Starting test 'RouteTest::testRoute with data set #2 ('8596000003', '1599000003')'.
 .

Test başarısız sürece size test fonksiyonun gerçek sonucu söylemeyeceğim ama en azından tüm iddia değerleri görmek için olsun.

Ya create your own Assertion class ve gerçek iddianın sınıf bir vekil gibi davranır ve, örneğin, gerçek iddiasına delege önce değerleri yankılanan var

$this->assertWithLogging('assertion', $expected, $actual, $message);

veya phpunit kendi sınıfı geçersiz (ben çok zor olacağını düşünüyorum) veya basitçe yapmak

$this->assertSame($expected, $actual, $message);
echo "$expected is $actual";

CLI ile çalıştırırken çıktı berbat çünkü o, güzel ya da değil. Zend Studio kullanmak için ne varsa, hata ayıklama Çıktı Tab çıkış görürsünüz.

Başka bir yol TestListeners ile olacak, ama sana tüm ayrıntıları anlatmak için onlar hakkında yeterli bilmiyorum. Eğer test süreci içine kanca gibi görünüyor.

Aslında sadece assert $ ileti değerini kullanabilirsiniz?? yöntemi ve bu alanda ne kadar istediğiniz koydu. Ben normalde (ben verilen bir testte birden fazla olduğunu varsayarak) beklenen ve gerçek değerleri ne göstermek hem de iddia için benzersiz bir isim için kullanabilirsiniz.

Başka bir şey, kendi dinleyici yazmak için olabilir. Bu şekilde, istediğiniz çıktıyı vermek ve PHPUnit için onaylamaları bırakabilirsiniz. Bu sanırım bunu yapmak için en kolay ve en özelleştirilebilir yolu olabilir.