Ich versuche, meinen Kopf um Tests zu wickeln, und ich weiß, es ist einfacher als ich denke. Meine Vermutung ist, dass ich unweigerlich Probleme bekommen werde, weil ich den Code zuerst geschrieben habe und gerade jetzt Tests mache, anstatt einen testgetriebenen Entwicklungsprozess zu haben.Testmethoden, die nichts zurückgeben
Meine Frage bezieht sich auf Funktionen, die etwas wie das Einschließen von Dateien tun. Sie geben nichts zurück, aber sie tun etwas für das Skript als Ganzes. Ich kann schreiben, einen Test zu behaupten, dass die Datei (check_file_validity
) vorhanden ist, und das wäre gerade nach vorne
<?php
class Includer {
public function __construct() {
$this->include_file("/var/www/index.html");
}
public function check_file_validity($file = "") {
// Check to see if the file exists
return true; // if exists
}
public function include_file($file = "") {
if ($this->check_file_validity($file)) {
include $file;
}
}
}
:
Lassen Sie uns sagen, dass ich eine Klasse, die eine Datei enthält.
Aber wäre es akzeptabel, einen Boolean auf der include_file
-Funktion basierend darauf zurückzugeben, ob die Datei enthalten war oder nicht? Wäre das nicht ein redundanter Test, da im Grunde die gleiche Sache passiert, wenn die check_file_validity
Funktion ausgeführt wird?
Ich sollte beachten, dass die Informationen, die angegeben werden, um die Datei zu enthalten, von der URL kommen, so dass keine Dateien hier außerhalb der Tests fest codiert werden würden (es sei denn, ich verspotte die $_GET
Parameter).
Würdest du sagen, dass der Code aufgebläht wird, was es aufgrund der hinzugefügten Funktionen auf lange Sicht schwieriger macht, Probleme aufzuspüren? Deine Antwort hilft mir zu verstehen, was zu tun ist, also danke dir dafür. – helllomatt
Kommt drauf an. Normalerweise möchten Sie diese Art von Funktionalitäten gruppieren. Anstatt eine Include-Methode hinzuzufügen, sollten Sie ein wiederverwendbares Loader-Objekt in Betracht ziehen. Oder wenn Sie Textdateien parsen möchten, würden Sie eine 'Reader'-Klasse erstellen und diese anstelle von PHP-Rohfunktionen verwenden. Aber Sie müssen nicht alles testen. Und in Ihrem Fall wäre es vollkommen in Ordnung, "check_file_validity" zu testen. Aber ich wollte Ihnen zeigen, wie man Methoden mit solchen Funktionen noch testen kann, wenn die Logik komplizierter wird. –