web-dev-qa-db-fra.com

Comment affirmer que le résultat est un entier dans PHPUnit?

Je voudrais pouvoir tester qu'un résultat est un entier (1,2,3 ...) où la fonction pourrait renvoyer n'importe quel nombre, par exemple:

$new_id = generate_id();

J'avais pensé que ce serait quelque chose comme:

$this->assertInstanceOf('int', $new_id);

Mais je reçois cette erreur:

L'argument n ° 1 de PHPUnit_Framework_Assert :: assertInstanceOf () doit être un nom de classe ou d'interface

48
bnp887
$this->assertInternalType("int", $id);
108
Farid Movsumov

Je préfère utiliser les constantes officielles de la classe PHPUnit.

PHPUnit v5.2 :

use PHPUnit_Framework_Constraint_IsType as PHPUnit_IsType;

// ...

$this->assertInternalType(PHPUnit_IsType::TYPE_INT, $new_id);

Ou plus tard qui est au moment de l'écriture est v7.0 :

use PHPUnit\Framework\Constraint\IsType;

// ...

$this->assertInternalType(IsType::TYPE_INT, $new_id);
28
Francesco Casula

La réponse originale est donnée ci-dessous pour la postérité, mais je recommanderais vivement d'utiliser assertInternalType() comme suggéré dans d'autres réponses.


Réponse originale:

Utilisez simplement assertTrue avec is_int ().

$this->assertTrue(is_int($new_id));
16
Mike Brant

Je pense mieux utiliser cette construction:

$this->assertThat($new_id, $this->logicalAnd(
    $this->isType('int'), 
    $this->greaterThan(0)
));

car il vérifiera non seulement le type de variable $ new_id, mais vérifiera si cette variable est supérieure à 0 (supposons que id ne peut être ni négatif ni égal à zéro), ce qui est plus strict et sécurisé.

4
Kudashev Serge

Cette réponse s'adresse aux personnes qui se demandent comment s'assurer que le résultat obtenu est un entier ou une chaîne d'entiers. (Le problème apparaît dans certains commentaires):

$this->assertEquals( 1 , preg_match( '/^[0-9]+$/', $new_id ),
    $new_id . ' is not a set of digits' );

Ici, nous nous assurons que preg_match retourne un '1', où preg_match vérifie que tous les caractères de chaîne sont des chiffres.

0
iateadonut