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
$this->assertInternalType("int", $id);
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);
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));
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é.
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.