Я пытаюсь проверить методы из следующего класса я написал (есть больше функций, чем то, что показано, в основном, одна функция для каждого является _ *() метод):Как PHPUnit проверить метод без возвращаемого значения?
class Validate {
private static $initialized = false;
/**
* Construct won't be called inside this class and is uncallable from the outside. This prevents
* instantiating this class. This is by purpose, because we want a static class.
*/
private function __construct() {}
/**
* If needed, allows the class to initialize itself
*/
private static function initialize()
{
if(self::$initialized) {
return;
} else {
self::$initialized = true;
//Set any other class static variables here
}
}
...
public static function isString($string) {
self::initialize();
if(!is_string($string)) throw new InvalidArgumentException('Expected a string but found ' . gettype($string));
}
...
}
Когда я проверить, если методы вызывают исключение из недопустимого ввода, он отлично работает! Однако, когда я проверяю, работает ли метод, как ожидается, PHPUnit жалуется, потому что у меня нет утверждений в тесте. Специфическая ошибка:
# RISKY This test did not perform any assertions
Однако, у меня нет никакой ценности отстаивать против, так что я не знаю, как это преодолеть.
Я читал некоторые о тестировании статических методов, но в основном это касается зависимостей между статическими методами. Кроме того, даже нестатические методы не могут иметь возвращаемого значения, поэтому как это исправить?
Для справки, мой тестовый код:
class ValidateTest extends PHPUnit_Framework_TestCase {
/**
* @covers ../data/objects/Validate::isString
* @expectedException InvalidArgumentException
*/
public function testIsStringThrowsExceptionArgumentInvalid() {
Validate::isString(NULL);
}
/**
* @covers ../data/objects/Validate::isString
*/
public function testIsStringNoExceptionArgumentValid() {
Validate::isString("I am a string.");
}
}
Почему этот метод не возвращает true/false? Почему бы это исключение, когда в качестве параметра передается значение, отличное от строки, так как очевидно, что метод проверки, если что-то является строкой, должен ожидать значения, отличные от строки, или нет метода для метода. Это похоже на плохо продуманный метод. –
@MikeBrant Он не возвращается, потому что ему не нужно. Я использую метод в своем коде как break/assert - если метод не генерирует исключение, мой код продолжает работать как обычно. Если это так, исключение должно быть рассмотрено. Нет никакой причины возвращать что-либо из этих методов и даже меньше причин писать операторы if/else и проводить циклы, проверяя эти возвращаемые значения. Я хочу исключение вместо TRUE/FALSE, потому что исключения могут остановить выполнение кода. Если вы поместите int, где массив должен идти в Java (или на большинстве типизированных языков), вы получаете исключение. Мне нужна аналогичная функциональность. –
@MikeBrant Кроме того, надлежащее тестирование означает, что мой метод работает как с недопустимым, так и с допустимым вводом. –