Hallo PHPler,
wir beschäftigen uns in einer Vorlesung mit Reverse-Engineering. Uns liegt eine in PHP geschriebene Community vor, für die wir einige PHPUnit-Tests schreiben sollen. Leider ist dies auch mein erster Kontakt mit PHP - deswegen habe ich sehr geringe PHP-Kenntnisse.
Mein konkretes Problem ist das Erstellen von Tests für die Methoden:
Ich habe mir nun eine Methode ausgesucht, die einen vorhandenen
Planungsabschnitt editiert.
PHP-Code:
public static function editPlanningSection(PlanningSection $section) {
$translate = getTranslate("planner");
if(!$section->validate()) {
self::editPlanningSectionDialog($section);
} else {
if (EstudyDB::addEditPlanningSection($section)) {
echo Functions::generateMessage(
$translate->_("Planungsabschnitt erfolgreich editiert."),
"note"
);
} else {
echo Functions::generateMessage(
$translate->_("Es ist ein unerwarteter Fehler aufgetreten. Planungsabschnitt wurde nicht editiert."),
"warning"
);
}
// Show Section list
$planner = new PlannerMashup($_SESSION['course']);
$planner->start();
}
}
Jetzt habe ich versucht, einen Test zu schreiben. Dieser soll einen Planungsabschnitt erzeugen und ihn der obigen Methode übergeben. Der Test soll erfolgreich sein, wenn
addEditPlanningSection($section) aufgerufen wird.
PHP-Code:
class PlanningSectionManagerTest extends PHPUnit_Framework_TestCase {
protected $object;
protected function setUp() {
$_SESSION['course'] = 42; // Konstruktor erwartet eine sessionID
$arr = array('planID' => 1000, 'author' => 'testAuthor', 'title' => 'testTitle', 'content' => 'testContent', 'starttime' => '0001-01-01 01:01:01', 'endtime' => '0001-01-02 02:02:02', 'eventstart' => '0001-01-01 01:01:01', 'eventend' => '0001-01-02 02:02:02'); // Die anderen Werte, die der Konstruktor erwartet.
$object = new planningSection($arr);
}
protected function tearDown() {
}
public function testShouldEditPlanningSection() {
$this->assertTrue(editPlanningSection($object));
}
}
Leider steige ich garnicht dahinter, wie ich bei so einem PHPUnit Test vorgehen soll. Das fängt schon mit dem Object an (ich weiß nicht, ob ich einfach so eines erstellen kann - er hat z.B. mit dem Datum Probleme) und hört mit der Logik - wie ich einen Test strukturiere - auf.
Hilfreich wäre für mich, wenn mir jemand erklären könnte, wie ich bei solch einem Test vorgehe und wie ich z.B. ein passendes Objekt erstelle oder wir der Test
prüfen kann, ob der Planunsabschnitt editierbar ist.
Ich hoffe, ich habe mich noch verständlich genug ausgedrückt.
Vielen Dank schonmal für Eure Mühe,
Geist der Zeit