¿Cómo iniciar sesión en User in Session dentro de una prueba funcional en Symfony 2.3?

He leído muchas publicaciones en stackoverflow sobre esto. Pero la mayoría de los métodos no son útiles en Symfony 2.3. Así que he intentado iniciar sesión en el usuario manualmente en la prueba para realizar algunas acciones en el back-end. Aquí está mi security.yml

security:
...
  role_hierarchy:
        ROLE_SILVER: [ROLE_BRONZE]
        ROLE_GOLD: [ROLE_BRONZE, ROLE_SILVER]
        ROLE_PLATINUM: [ROLE_BRONZE, ROLE_SILVER, ROLE_GOLD]
        ROLE_ADMIN: [ROLE_BRONZE, ROLE_SILVER, ROLE_GOLD, ROLE_PLATINUM, ROLE_ALLOWED_TO_SWITCH]

    providers:
        database:
            entity: { class: Fox\PersonBundle\Entity\Person, property: username }

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        login:
            pattern:  ^/person/login$
            security: false

        main:
            pattern:    ^/
            provider:   database
            form_login:
                check_path: /person/login-check
                login_path: /person/login
                default_target_path: /person/view
                always_use_default_target_path: true
            logout:
                path:   /person/logout
                target: /
            anonymous: true

    access_control:
        - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/person/registration, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/person, roles: ROLE_BRONZE }

Aquí está mi prueba:

class ProfileControllerTest extends WebTestCase
{
    public function setUp()
    {
        $kernel = self::getKernelClass();

        self::$kernel = new $kernel('dev', true);
        self::$kernel->boot();
    }

    public function testView()
    {
        $client = static::createClient();

        $person = self::$kernel->getContainer()->get('doctrine')->getRepository('FoxPersonBundle:Person')->findOneByUsername('master');

        $token = new UsernamePasswordToken($person, $person->getPassword(), 'main', $person->getRoles());

        self::$kernel->getContainer()->get('security.context')->setToken($token);

        self::$kernel->getContainer()->get('event_dispatcher')->dispatch(
        AuthenticationEvents::AUTHENTICATION_SUCCESS,
        new AuthenticationEvent($token));

        $crawler = $client->request('GET', '/person/view');
    }

Y cuando corro esta prueba,$person = $this->get(security.context)->getToken()->getUser(); El método no está funcionando en la prueba del controlador. Di si en la llamada del controlador$person->getId(); Tendré un errorCall to a member function getId() on a non-object in... .

Entonces, ¿puede indicar la manera correcta de iniciar sesión en la prueba funcional en Symfony 2.3?

¡Gracias!

EDIT_1: Si me cambioSymfony/Component/Security/Http/Firewall/ContextListener.php y comenta una cadena:

if (null === $session || null === $token = $session->get('_security_'.$this->contextKey)) {
            // $this->context->setToken(null);

            return;
        }

Todas las pruebas se realizan sin errores.

EDITAR_2: Esta es una referencia que he tratado de usar:primero segundo tercero cuarto quinto sexto séptimo octavo noventa

Respuestas a la pregunta(2)

Su respuesta a la pregunta