PHPUnit - два тестовых класса для тестирования одного и того же объекта - PullRequest
1 голос
/ 18 октября 2011

У меня есть класс для доступа к веб-сервисам. Опционально может кэшировать результаты. Поэтому я хочу написать два тестовых класса. Первый (Ws_Test) запускает тесты без кэширования. Второй (WsCached_Test) расширяет первый и выполняет те же тесты, но с включенным кэшем.

Теоретически это решает мою проблему, но когда я запускаю «все тесты», запускается только второй класс тестирования (WsCached_Test). Похоже, PHPUnit предполагает, что класс уже был полностью протестирован при запуске WsCached_Test.

class Ws_Test extends PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        $this->ws = new Ws();
    }

    // lots of tests
}

class WsCached_Test extends Ws_Test
{
    public function setUp()
    {
        $this->ws = new Ws();
        $this->ws->setCacheResults(true);
    }

    // inherits lots of tests
}

1 Ответ

2 голосов
/ 18 октября 2011

Я не знаю, решит ли это проблему, но моя первая попытка исправить это сделать базовый класс абстрактным и иметь два подкласса: WsCached_Test и WsUncached_Test.

abstract class BaseWsTester extends PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        $this->ws = new Ws();
    }

    // lots of tests
}

class WsUncached_Test extends BaseWsTester
{
    // inherits lots of tests
}

class WsCached_Test extends BaseWsTester
{
    public function setUp()
    {
        parent::setUp();
        $this->ws->setCacheResults(true);
    }

    // inherits lots of tests
}

Имя BaseWsTester выбрано для того, чтобы PHPUnit не думал, что это контрольный пример, и его абстрактность должна помочь. Если это не работает, переместите setUp() вниз в каждый подкласс и удалите его из базового класса.

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