PHPUnit测试单例

I am trying to write a test for some very old code we have using PHPUnit. I've given the rough structure of it here, I am trying to test the isMember() method of ClassB which it inherits from ClassA. It should just be checking if a constant value exists in the class.

The problem I am having is that it is obviously a protected constructor, so I don't know how to test this as I keep getting protected contruct errors in PHPUnit as obviously the constructor is protected. Please advise how I test this?

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';
}

You would test it like any other class, you just don't use the constructor in the test.

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

I am making a guess on the assertions and you could refactor the test to use a data provider. But the general idea is the same. You don't invoke the constructor directly in your tests for a singleton. The getInstance method replaces the call to the constructor.