Влияет ли насмешка на количество ваших утверждений? - PullRequest
6 голосов
/ 09 апреля 2011

Я замечаю, что когда я использую фиктивные объекты, PHPUnit правильно сообщит о количестве выполненных тестов, но неправильно сообщит о количестве сделанных мной утверждений.Фактически, каждый раз, когда я издеваюсь, это считается другим утверждением.Тестовый файл с 6 тестами, 7 утверждениями утверждений и каждым тестированием, когда один раз сообщил о 6 тестах, 13 утверждениях.

Вот тестовый файл со всеми, кроме одного, удаленного теста (для иллюстрации здесь), плюс я представил еще один тест,не заглушает, чтобы отследить эту проблему.PHPUnit сообщает о 2 тестах, 3 утверждениях.Я удаляю пустышку: 1 тест, 2 утверждения.

require_once '..\src\AntProxy.php';

class AntProxyTest extends PHPUnit_Framework_TestCase {
    const sample_client_id = '495d179b94879240799f69e9fc868234';    
    const timezone = 'Australia/Sydney';
    const stubbed_ant = "stubbed ant";
    const date_format = "Y";

    public function testBlankCategoryIfNoCacheExists() {
        $cat = '';
        $cache_filename = $cat.'.xml';
        if (file_exists($cache_filename))
            unlink($cache_filename);

        $stub = $this->stub_Freshant($cat);

        $expected_output = self::stubbed_ant;
        $actual_output = $stub->getant();
        $this->assertEquals($expected_output, $actual_output);
    }

    public function testDummyWithoutStubbing() {
        $nostub = new AntProxy(self::sample_client_id, '', self::timezone, self::date_format);
        $this->assertTrue(true);
    }    

    private function stub_FreshAnt($cat) {
        $stub = $this->getMockBuilder('AntProxy')
                     ->setMethods(array('getFreshAnt'))
                     ->setConstructorArgs(array(self::sample_client_id, $cat, self::timezone, self::date_format))
                     ->getMock();

        $stub->expects($this->any())
             ->method('getFreshAnt')
             ->will($this->returnValue(self::stubbed_ant));

        return $stub;
    }
}

Это похоже на то, что утверждение было оставлено в одном из методов насмешки фреймворка.Есть ли способ показать каждое (проходящее) утверждение?

1 Ответ

9 голосов
/ 09 апреля 2011

После завершения каждого метода теста PHPUnit проверяет настройку фиктивных ожиданий во время теста. PHPUnit_Framework_TestCase::verifyMockObjects() увеличивает количество утверждений для каждого создаваемого фиктивного объекта. Вы можете переопределить метод, чтобы отменить это, если вы действительно хотите, сохранив текущее количество утверждений, вызвав родительский метод и вычтя разницу.

protected function verifyMockObjects()
{
    $count = $this->getNumAssertions();
    parent::verifyMockObjects();
    $this->addToAssertionCount($count - $this->getNumAssertions());
}

Конечно, verifyMockObjects() сгенерирует исключение сбоя утверждения, если какое-либо ожидание неудовлетворительно, поэтому вам нужно будет перехватить исключение и сбросить его после сброса счетчика. Я оставлю это тебе. :)

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