web-dev-qa-db-ja.com

PHPUnitで結果が整数であることをどのようにアサートしますか?

結果が整数(1,2,3 ...)であることをテストできるようにしたいのですが、関数は任意の数を返すことができます。

$new_id = generate_id();

私はそれが次のようなものになると思っていました:

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

しかし、私はこのエラーを受け取ります:

PHPUnit_Framework_Assert :: assertInstanceOf()の引数#1はクラス名またはインターフェイス名でなければなりません

51
bnp887
$this->assertInternalType("int", $id);

EditPHPUnit 8 の時点で、答えは:

$this->assertIsInt($id);
116
Farid Movsumov

公式のPHPUnitクラス定数を使用することを好みます。

PHPUnit v5.2

use PHPUnit_Framework_Constraint_IsType as PHPUnit_IsType;

// ...

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

または、現時点では v7.

use PHPUnit\Framework\Constraint\IsType;

// ...

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

元の答えは後世のために以下に与えられますが、他の答えで示唆されているようにassertInternalType()を使用することを強くお勧めします。


元の回答:

Is_int()でassertTrueを使用するだけです。

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

私はこの構造をよりよく使用すると思います:

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

これは、$ new_id変数のタイプだけでなく、この変数が0より大きいかどうかをチェックするため(idを負またはゼロにすることはできません)、これがより厳密で安全であるためです。

5
Kudashev Serge

PHPUnit 8以降、他のアプローチは非推奨になり、assertInternalType()はこのエラーをスローして失敗します:

assertInternalType()は非推奨であり、PHPUnit 9では削除されます。テストをリファクタリングして、assertIsArray()、assertIsBool()、assertIsFloat()、assertIsInt()、assertIsNumeric()、assertIsObject()、assertIsResource()、assertIsString()、代わりにassertIsScalar()、assertIsCallable()、またはassertIsIterable()を使用します。

現在、この目的でassertIsNumeric()またはassertIsInt()を使用することをお勧めします。

2
ShadowBeast

この答えは、結果が整数または整数の文字列であることを確認する方法を知りたい人向けです。 (問題はいくつかのコメントに表示されます):

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

ここでは、preg_matchが「1」を返すことを確認します。preg_matchは、すべての文字列が数字であることをテストします。

0
iateadonut