Bonjour,

Je suis en train de développer une petite application avec Symfony 3. Pour m'exercer, j'ai décidé de mettre en place les testes unitaires avec PHPUnit. Tout ce passe bien jusqu'au moment ou j'aimerais tester un block catch qui me retourne une valeur.

J'ai essayé plusieurs solutions et après quelques jours de recherche, je solicite votre aide car je n'y arrive pas. Impossible de rentrer dans le bloc catch lors de test même avec Stub et Mock.

Voici le code de ma méthode de mon manager que je veux tester.

/**
     * @param $id
     * @return bool
     */
    public function activate($id) {
        try {
            $user = $this->getUserById($id);
            $user->setValid(true);

            $this->persist($user);

            return true;
        } catch (\Exception $e) {
            return false;
        }
    }

Et voici le code de mon test (le dernier après toutes mes recherches)

public function testException() {
        $stub = $this->getMockForAbstractClass(UserManager::class, [$this->em])

        $stub->expects($this->any())
            ->method('activate')
            ->willThrowException(new \Exception);

        $this->assertFalse($stub->activate(1));
    }

Et voici le retour de la console

There was 1 failure:

1) tests\GR\FrontBundle\Tests\Managers\UserManagerTest::testException
Failed asserting that true is false.

/var/www/local.dev/__clients/aideetmoi/tests/GR/FrontBundle/Services/Managers/UserManagerTest.php:284

Impossible de rentrer dans le catch qui devrait me retourner false.

Quelqu'un d'entre vous à déjà réussi à tester un block catch ?

Je vous remercie pour votre aide

Aucune réponse