さまざまなユーザー クラスが親ユーザー クラスから継承する場合は、テスト ケース クラスに同じ継承構造を使用することをお勧めします。
次のサンプル クラスを検討してください。
class User
{
    public function commonFunctionality()
    {
        return 'Something';
    }
    public function modifiedFunctionality()
    {
        return 'One Thing';
    }
}
class SpecialUser extends User
{
    public function specialFunctionality()
    {
        return 'Nothing';
    }
    public function modifiedFunctionality()
    {
        return 'Another Thing';
    }
}
テスト ケース クラスで次のことができます。
class Test_User extends PHPUnit_Framework_TestCase
{
    public function create()
    {
        return new User();
    }
    public function testCommonFunctionality()
    {
        $user = $this->create();
        $this->assertEquals('Something', $user->commonFunctionality);
    }
    public function testModifiedFunctionality()
    {
        $user = $this->create();
        $this->assertEquals('One Thing', $user->commonFunctionality);
    }
}
class Test_SpecialUser extends Test_User
{
    public function create() {
        return new SpecialUser();
    }
    public function testSpecialFunctionality()
    {
        $user = $this->create();
        $this->assertEquals('Nothing', $user->commonFunctionality);
    }
    public function testModifiedFunctionality()
    {
        $user = $this->create();
        $this->assertEquals('Another Thing', $user->commonFunctionality);
    }
}
各テストはオーバーライド可能な create メソッドに依存し、テスト メソッドは親テスト クラスから継承されるため、親クラスのすべてのテストは、期待される動作をオーバーライドするためにオーバーライドしない限り、子クラスに対して実行されます。
これは私の限られた経験の中でうまくいきました。