Wie testet PHPUnit eine Methode ohne Rückgabewert?

Ich versuche, Methoden aus der folgenden Klasse zu testen, die ich geschrieben habe (es gibt mehr Funktionen als gezeigt, im Grunde ist eine Funktion für jede _ * () -Methode):

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

  ...

}

Wenn ich teste, ob die Methoden bei ungültigen Eingaben eine Ausnahme auslösen, funktioniert das hervorragend! Wenn ich jedoch teste, ob die Methode wie erwartet funktioniert, beschwert sich PHPUnit, weil ich im Test keine Aussage getroffen habe. Der spezifische Fehler ist:

# RISKY This test did not perform any assertions

ch habe jedoch keinen Wert, gegen den ich mich behaupten könnte, und bin mir nicht sicher, wie ich das überwinden sol

Ich habe etwas über das Testen statischer Methoden gelesen, aber das scheint hauptsächlich die Abhängigkeiten zwischen statischen Methoden abzudecken. Darüber hinaus können auch nicht statische Methoden keinen Rückgabewert haben. Wie kann dies behoben werden?

Zur Referenz, mein Testcode:

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.");
  }
}

Antworten auf die Frage(6)

Ihre Antwort auf die Frage