Тестирование на множественные исключения с использованием phpunit - PullRequest
2 голосов
/ 30 ноября 2010

Я новичок в модульном тестировании и написал следующий тест:

/**
 * @expectedException Exception
 */
public function testCantGetInvalidCampsite() {
    $invalidIds = array(300000, "string");
    foreach($invalidIds as $id) {
        $this->campsites->getCampsite($id); // will throw an exception
    }
}

Я не уверен, хотя это на самом деле тестирует все недействительные идентификаторы, или просто останавливается, как только он попадаетпервое исключение.Это то, как я должен тестировать для нескольких исключений, или мне нужно разделить это на несколько разных тестов, или есть другой способ сделать это?

Кроме того, если мое сообщение об исключении генерируется динамическинапример, «Не удалось получить запись с идентификатором 30000», как проверить, что создается правильное динамическое сообщение?

Ответы [ 2 ]

10 голосов
/ 14 августа 2013

В этой ситуации я использую phpunit dataProviders :

class MyTest extends PHPUnit_Framework_TestCase
{
    public function invalidIds()
    {
       return array(
           array(300000),
           array("string")
       );
    }


    /**
     * @dataProvider invalidIds
     * @expectedException Exception
     */
    public function testCantGetInvalidCampsite($invalidId)
    {
        $this->campsites->getCampsite($invalidId); // will throw an exception
    }
}
1 голос
/ 07 декабря 2010

Вы можете попытаться перехватить исключения, сосчитать их и не пройти тест, если число ожидаемых исключений не соответствует числу обнаруженных исключений.Из

Вы также можете получить сообщение об исключении, если вы его встретите, и проверить, правильно ли оно.

В коде:

public function testCantGetInvalidCampsite() {
    $invalidIds = array(300000, "string");
    $exceptionCount = 0;

    foreach($invalidIds as $id) {

        try {
            $this->campsites->getCampsite($id); // will throw an exception
        } catch (Exception $e)
            $exceptionCount ++;
            $this->assertEquals('my exception message', $e->getMessage());
        }
    }

    // assert here that exception count is two
    $this->assertEquals(2, $exceptionCount);
}

Более чистый путьПо моему мнению, сделать это было бы, добавив два TestCases ...

testCantGetInvalidCampSite_String()
testCantGetInvalidCampSite_InvalidId()

, чтобы вы сразу увидели, что не получается, если тест не пройден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...