Ответ 1
$this->assertInternalType("int", $id);
Изменить: Начиная с PHPUnit 8 ответ:
$this->assertIsInt($id);
Я хотел бы иметь возможность проверить, что результатом является целое число (1,2,3...), где функция может возвращать любое число, например:
$new_id = generate_id();
Я подумал, что это будет что-то вроде:
$this->assertInstanceOf('int', $new_id);
Но я получаю эту ошибку:
Аргумент # 1 PHPUnit_Framework_Assert:: assertInstanceOf() должен быть именем класса или интерфейса
$this->assertInternalType("int", $id);
Изменить: Начиная с PHPUnit 8 ответ:
$this->assertIsInt($id);
Я предпочитаю использовать официальные константы класса PHPUnit.
PHPUnit v5.2:
use PHPUnit_Framework_Constraint_IsType as PHPUnit_IsType;
// ...
$this->assertInternalType(PHPUnit_IsType::TYPE_INT, $new_id);
Или последний, который на момент написания является v7.0:
use PHPUnit\Framework\Constraint\IsType;
// ...
$this->assertInternalType(IsType::TYPE_INT, $new_id);
Оригинальный ответ приведен ниже для потомков, но я настоятельно рекомендую использовать assertInternalType()
, как это предлагается в других ответах.
Оригинальный ответ:
Просто используйте assertTrue с is_int().
$this->assertTrue(is_int($new_id));
Я думаю, лучше использовать эту конструкцию:
$this->assertThat($new_id, $this->logicalAnd(
$this->isType('int'),
$this->greaterThan(0)
));
потому что он проверит не только тип переменной $ new_id, но и проверит, больше ли эта переменная, чем 0 (предположим, id не может быть отрицательным или нулевым), и это более строго и безопасно.
Начиная с PHPUnit 8, другие подходы устарели, assertInternalType()
теперь выдаст эту ошибку и завершится ошибкой:
assertInternalType() устарела и будет удалена в PHPUnit 9. Рефакторинг вашего теста для использования assertIsArray(), assertIsBool(), assertIsFloat(), assertIsInt(), assertIsNumeric(), assertIsObject(), assertIsRisString() Вместо этого assertIsScalar(), assertIsCallable() или assertIsIterable().
Теперь для этой цели рекомендуется использовать assertIsNumeric()
или assertIsInt()
.
Этот ответ для людей, задающихся вопросом, как удостовериться, что результатом является ЛИБО целое число или строка целых чисел. (Проблема появляется в некоторых комментариях):
$this->assertEquals( 1 , preg_match( '/^[0-9]+$/', $new_id ),
$new_id . ' is not a set of digits' );
Здесь мы удостоверимся, что preg_match возвращает '1', где preg_match проверяет, что все строковые символы являются цифрами.