wake-up-neo.com

Wie behaupte ich, dass das Ergebnis in PHPUnit eine ganze Zahl ist?

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

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

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);
28

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));
16
Mike Brant

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.

4
Kudashev Serge

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.

2
ShadowBeast

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.

0
iateadonut