Ich würde gerne testen können, dass ein Ergebnis eine ganze Zahl (1,2,3 ...) ist, bei der die Funktion eine beliebige Zahl zurückgeben könnte, z.
$new_id = generate_id();
Ich hatte gedacht, es wäre so etwas wie:
$this->assertInstanceOf('int', $new_id);
Aber ich bekomme diesen Fehler:
Das Argument Nr. 1 von PHPUnit_Framework_Assert :: assertInstanceOf () muss ein Klassen- oder Schnittstellenname sein
$this->assertInternalType("int", $id);
Ich bevorzuge die offiziellen PHPUnit-Klassenkonstanten.
PHPUnit v5.2 :
use PHPUnit_Framework_Constraint_IsType as PHPUnit_IsType;
// ...
$this->assertInternalType(PHPUnit_IsType::TYPE_INT, $new_id);
Oder spätestens, was zum Zeitpunkt des Schreibens v7.0 ist:
use PHPUnit\Framework\Constraint\IsType;
// ...
$this->assertInternalType(IsType::TYPE_INT, $new_id);
Die ursprüngliche Antwort wird unten für die Nachwelt gegeben, aber ich würde dringend die Verwendung von assertInternalType()
empfehlen, wie in anderen Antworten vorgeschlagen.
Ursprüngliche Antwort:
Verwenden Sie einfach assertTrue mit is_int ().
$this->assertTrue(is_int($new_id));
Ich denke, verwenden Sie diese Konstruktion besser:
$this->assertThat($new_id, $this->logicalAnd(
$this->isType('int'),
$this->greaterThan(0)
));
weil nicht nur der Typ der $ new_id-Variablen geprüft wird, sondern auch, ob diese Variable größer als 0 ist (vorausgesetzt, die ID kann nicht negativ oder null sein) und dies ist strenger und sicherer.
Ab PHPUnit 8 sind die anderen Ansätze veraltet. assertInternalType()
löst nun diesen Fehler aus und schlägt fehl:
assertInternalType () ist veraltet und wird in PHPUnit 9 entfernt. Überarbeiten Sie Ihren Test, um assertIsArray (), assertIsBool (), assertIsFloat (), assertIsInt (), assertIsNumeric (), assertIsObject (), assertIsResource (), assertIstring () zu verwenden. assertIsScalar (), assertIsCallable () oder assertIsIterable ().
Es wird jetzt empfohlen, assertIsNumeric()
oder assertIsInt()
für diesen Zweck zu verwenden.
Diese Antwort ist für Leute, die sich fragen, wie sie sicherstellen können, dass das Ergebnis entweder eine ganze Zahl oder eine ganze Zahl von Zahlen ist. (Das Problem erscheint in einigen Kommentaren):
$this->assertEquals( 1 , preg_match( '/^[0-9]+$/', $new_id ),
$new_id . ' is not a set of digits' );
Hier stellen wir sicher, dass preg_match eine '1' zurückgibt, wobei preg_match prüft, ob alle Zeichenfolgen Ziffern sind.