Jacob Atzen <jacob@aub.dk> wrote:
> "Kasper Garnæs" <demos@mailme.dk> writes:
>
>> Problemet, jeg oplevede, var, at jeg i mine tests havde brug for at
>> hente og manipulere med data udenfor PHP, og her begyndte det at
>> blive irriterende at skulle sætte det op manuelt inden et test
>> run. I det konkrete tilfælde var det ikke en database, men jeg kan
>> forestille mig, at det kunne skabe lignende problemer, hvis ikke man
>> få skrevet ordenlige setUp- og tearDown-funktioner.
>
> Til lige netop problemet med "ekstern" data kan man tilsyneladende
> bruge såkaldte mock objects. Jeg har læst lidt om det rundt omkring på
> nettet i dag og det virker meget smart. Jeg kunne dog godt bruge nogen
> eksempler på, hvordan det gøres i praksis.
Jeps - det er selvfølgelig også en løsning. Uden at have prøvet den løsning,
forestiller jeg mig umiddelbart noget á la:
class MockDB extends DB {
function queryGetRows($sql) {
return array(
array("id" => "1", "name" => "foo"),
array("id" => "2", "name" => "bar")
);
}
}
>> Så længe ens PHP mere eller mindre fungerer som en måde at vise data
>> fra en database på en hjemmeside - og det er der efter min mening
>> meget PHP, der gør - er jeg dog ikke sikker på at unittesting er
>> vejen frem. Ellers et interessant emne at hive frem i gruppen
.
>
> Hvorfor mener du ikke unit testing er relevant i forbindelse med
> database baserede hjemmesider?
Jeg mener *ikke*, at unit testing ikke er relevant i forbindelse med
databasebaserede hjemmesider. Som jeg ser det er meningen med unit testing
at undersøge om funktioner returnerer det, man ønsker den skal returnerer -
altså at finde semantiske fejl. Hvis ens funktioners eneste opgave er sende
data frem og tilbage fra en database - så som ndenstående - så har jeg svært
ved at se pointen ved unittesting. Jeg mener, det vil tage for lang tid at
skrive tests etc. i forhold til udbyttet.
function getRow($id) {
db_connect();
$result = db_query("SELECT id, name FROM table WHERE id = '" . $id .
"'");
db_disconnect();
return db_getrow($result);
}
Hvis der til gengæld er tale om mere avancerede operationer, samspil mellem
klasser etc. kan unittesting være en fin idé, ligesom det kan være det, hvis
man er flere samarbejdende progrømmerer, der aftaler interfaces mellem
klasser.
Kasper