/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Unittesting
Fra : Jacob Atzen


Dato : 03-10-03 09:28

Hej NG,

Er der nogen der har erfaring med unittesting i PHP?
Findes der noget best-practice/gode råd omkring unittesting i PHP?
Findes der nogen smarte måder at bruge unittesting på i forbindelse
med databasebaserede projekter?

Jeg har kigget på PhpUnit[1] og PHPUnit[2], men synes ikke at de helt
virker som om de vil være gode nok til større projekter (jeg har dog
aldrig arbejdet med unittesting før, så jeg kan selvfølgelig tage
fejl). Nogen der har erfaring med disse eller andre pakker?

Alle erfaringer og kommentarer modtages med glæde

[1]: <http://phpunit.sourceforge.net/>
[2]: <http://www.students.cs.uu.nl/people/voostind/index.php?page=software>

--
Med venlig hilsen
- Jacob Atzen

 
 
Kasper Garnæs (03-10-2003)
Kommentar
Fra : Kasper Garnæs


Dato : 03-10-03 16:19

Jacob Atzen <jacob@aub.dk> wrote:

> Er der nogen der har erfaring med unittesting i PHP?
> Findes der nogen smarte måder at bruge unittesting på i forbindelse
> med databasebaserede projekter?

Jeg har brugt unittesting vha. PhpUnit (http://phpunit.sourceforge.net/), og
det fungerede som sådan ganske udemærket til afprøvning af enkelte klasser.
Jeg var dog nødt til at ændre lidt i koden for også at kunne få returneret
brugbare resultater, når jeg arbejdede med objeker.

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.

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 .

Mvh.
Kasper Garnæs



Jacob Atzen (03-10-2003)
Kommentar
Fra : Jacob Atzen


Dato : 03-10-03 17:45

"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.

> 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?

--
Med venlig hilsen
- Jacob Atzen

Kasper Garnæs (03-10-2003)
Kommentar
Fra : Kasper Garnæs


Dato : 03-10-03 19:54

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



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste