싱글 톤 클래스를 인스턴스화 할 수 없도록 테스트 케이스를 작성하려고합니다. 내 테스트는 다음과 같다 있도록 싱글의 생성자는 개인으로 정의된다 (:: __ 구조 개인 싱글로 전화 :PHP에서 simpletest로 치명적인 오류를 예상하는 방법
이$this->expectError();
$test = new TestSingletonClassA();
가 대신 오류를 잡기 시험을 전달하는, 나는 'PHP 치명적인 오류) '. 나는 또한 expectError에 대한 매개 변수로 PatternExpectation을 전달하려고했지만 그 중 하나도 작동하지 않았습니다. 의견 있으십니까?
일부 배경 : php5.3, simpletest1.1a
이 상황에서 테스트 케이스 대신 정확한 디자인에 집중해야할까요? 내 구현에서는, 싱글 톤은 추상 클래스입니다. 그래서 저는 서브 클래스가 public 생성자를 구현할 수 없도록 보장하고, private 생성자를 오버라이드 (override) 할 수있는 방법을 원합니다. 내가 이것을 할 수있는 방법이 있습니까? –
저는 그렇게 생각하지 않습니다.하지만 생성자가 호출되어서는 안되는 경우 호출되지 않도록하는 다른 방법이 있습니다. 한 가지 방법은 인스턴스화 된 클래스를 추적하는 배열을 갖는 것입니다. 다른 하나는 debug_stacktrace를 사용하여 일부 get_instance 메소드 내에서 호출 스택이 있는지 확인합니다. 두 전략 모두 기본 클래스의 생성자 내부에 적용됩니다. 또한, 당신은 기본 클래스 생성자를 보호해야 할 것 같아요, 또는 하위 클래스 생성자 아마도 부모를 호출 할 수 없을 것입니다 : : __ construct – davogotland