Я пытаюсь написать тестовый пример, чтобы гарантировать, что класс Singleton не может быть создан. Конструктор Singleton определяется как частное, так мой тест следующим образом:Как ожидать фатальных ошибок с simpletest в php
$this->expectError();
$test = new TestSingletonClassA();
Вместо того, чтобы ловить ошибку и прохождения теста, я получаю «PHP Фатальная ошибка: Вызов частного Singleton :: __ конструкт (). Я также пробовал передать PatternExpectation в качестве параметра ожидатьError, но это тоже не сработало. Есть ли у вас какие-либо предложения?
Некоторые фона: php5.3, simpletest1.1a
Так что, полагаю, для этой ситуации вместо тестовых случаев я должен сосредоточиться на правильном дизайне? В моей реализации Singleton является абстрактным классом, поэтому я хочу, чтобы некоторый способ гарантировать, что подклассы не могут реализовать публичный конструктор, но могут переопределить частный конструктор. Есть ли способ сделать это? –
Я так не думаю .. но есть и другие способы убедиться, что конструктор не вызывается, когда он не должен. один способ будет иметь массив, отслеживающий инстанцированные классы. другой будет использовать debug_stacktrace, чтобы проверить, что стек вызовов приходит из некоторого метода get_instance. обе стратегии будут применяться внутри конструктора базового класса. также, я думаю, вам нужно сделать защищенный конструктор базового класса или конструктор подкласса, вероятно, не сможет вызвать parent :: __ construct – davogotland