PHPUnit тестирует синглтон

Я пытаюсь написать тест для очень старого кода, который мы используем с помощью PHPUnit. Я дал здесь приблизительную структуру, я пытаюсь протестировать метод isMember () класса B, который он наследует от ClassA. Нужно просто проверить, существует ли в классе постоянное значение.

Проблема, с которой я столкнулся, заключается в том, что это, очевидно, защищенный конструктор, поэтому я не знаю, как это проверить, так как я получаю защищенные конструктивные ошибки в PHPUnit, поскольку, очевидно, конструктор защищен. Посоветуйте пожалуйста, как мне это проверить?

abstract class ClassA implements InterfaceA {

private $mValueList;
protected static $instance;

protected function __construct() {

}

protected static function getInstance(ClassA $obj) {
if (is_null($obj->instance)) {
$obj->instance = $obj;
}
return $obj->instance;
}

public function isMember($value) {
return isset($this->mValueList[$value]);
}

....more methods......

}

class ClassB extends ClassA {

public static function getInstance() {
return parent::getInstance(new self());
}

const CON1 = 'string1';
const CON2 = 'string2';
}

1

Решение

Вы бы протестировали его, как любой другой класс, вы просто не используете конструктор в тесте.

public function testIsMember() {
$classB = ClassB::getInstance();
$this->assertTrue($classB->isMember('string1'));
$this->assertFalse($classB->isMember('foo'));
}

Я делаю предположение об утверждениях, и вы могли бы реорганизовать тест для использования поставщика данных. Но общая идея та же самая. Вы не вызываете конструктор непосредственно в ваших тестах для синглтона. getInstance Метод заменяет вызов конструктора.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]