Hoe Web code te testen?

stemmen
11

Heeft iemand een aantal goede tips voor het schrijven test code voor de database-backend ontwikkeling waar sprake is van een sterke afhankelijkheid van de staat?

In het bijzonder wil ik tests voor code die gegevens op te halen uit de database te schrijven, maar de antwoorden zal afhangen van de gegevens in de database (die in de loop der tijd kan veranderen).

Hebben mensen meestal een aparte ontwikkeling systeem met een 'bevroren' databank, zodat een bepaalde functie altijd exact hetzelfde resultaat set moet terugkeren?

Ik ben er vrij zeker van dat dit is geen nieuw probleem, dus ik zeer geïnteresseerd om te leren van andermans ervaring zou zijn.

Zijn er goede artikelen die er zijn dat dit nummer van web-gebaseerde ontwikkeling te bespreken in het algemeen?

Ik schrijf meestal PHP code, maar ik zou verwachten dat al deze kwesties zijn grotendeels taal en het kader agnostisch.

De vraag is gesteld op 05/08/2008 om 22:58
bron van user
In andere talen...                            


10 antwoorden

stemmen
5

Je moet kijken naar DbUnit, of proberen om een ​​PHP-equivalent te vinden (er moet zijn die er zijn). U kunt het gebruiken om de database te bereiden met een specifieke set van gegevens die uw test gegevens vertegenwoordigen, en zal dus elke test niet langer afhankelijk van de database en een aantal bestaande toestand. Op deze manier, elke test is zelf opgenomen en zal niet breken tijdens de verdere database gebruik.

Update: Een snelle google search toonde een DB-eenheid extensie voor PHPUnit.

antwoordde op 05/08/2008 om 23:03
bron van user

stemmen
3

Als je vooral bezig met datalaag testen bent, zou u willen controleren dit boek: xUnit Testpatronen: Refactoring Code Test . Ik was altijd onzeker over het zelf, maar dit boek doet geweldig werk te helpen opsomming gegeven van de problemen, zoals prestaties, reproduceerbaarheid, etc.

antwoordde op 06/08/2008 om 05:14
bron van user

stemmen
2

We maken gebruik van een database in het geheugen (HSQL: http://hsqldb.org/ ). Hibernate ( http://www.hibernate.org/ ) maakt het makkelijk voor ons om onze unit tests wijzen op het testen db, met de toegevoegde bonus dat ze zo snel als de bliksem lopen ..

antwoordde op 10/09/2008 om 13:02
bron van user

stemmen
2

Ik denk dat het hangt af van wat de database die u gebruikt, maar Red Gate (www.red-gate.com) maken van een tool genaamd SQL Data Generator. Dit kan worden geconfigureerd om uw database te vullen met verstandige zoek testgegevens. Je kunt ook zeggen dat het altijd dezelfde zaad in de random number generator, zodat je 'random' data is elke keer hetzelfde.

U kunt dan schrijf je unit tests te maken van deze betrouwbare, herhaalbare gegevens.

Als voor het testen van de web kant van de dingen, ben ik momenteel op zoek naar Selenium (selenium.openqa.org). Dit lijkt een cross-browser staat testsuite die u functionaliteit te testen zal helpen. Echter, zoals met al deze website testtools, is er geen echte manier om te testen hoe goed deze dingen te kijken in alle browsers zonder het gieten van een menselijk oog over hen!

antwoordde op 06/08/2008 om 14:44
bron van user

stemmen
1

In het algemeen ben ik het eens met Peter, maar voor het creëren en verwijderen van de testgegevens Ik zou SQL niet direct gebruiken. Ik geef de voorkeur aan een aantal CRUD API die wordt gebruikt in het product om gegevens als vergelijkbaar met de productie mogelijk te maken gebruiken ...

antwoordde op 10/09/2008 om 12:31
bron van user

stemmen
1

Ik zou voorstellen om drie databases gebruiken. Een productie database, een ontwikkeling van de database (gevuld met een aantal zinvolle gegevens voor elke ontwikkelaar) en een test-database (met lege tafels en misschien een paar rijen die altijd nodig zijn).

Een manier om de database code te testen is:

  1. Plaats een paar rijen (met behulp van SQL) aan de staat initialiseren
  2. Voer de functie die u wilt testen
  3. Vergelijk verwacht met de werkelijke resultaten. Hier kun je je normale unit testing framework
  4. Het schoonmaken van de rijen die zijn gewijzigd (dus de volgende run zal niet zie de vorige run)

De opruiming zou kunnen gebeuren in een standaard manier (natuurlijk alleen bij het testen database) met DELETE * FROM table.

antwoordde op 19/08/2008 om 19:40
bron van user

stemmen
1

Hier is mijn strategie (ik gebruik JUnit, maar ik weet zeker dat er een manier is om het equivalent in PHP te doen):

Ik heb een methode die wordt uitgevoerd voordat alle van de Unit Tests voor een bepaalde DAO klasse. Het zet de dev database naar een bekende staat (voegt alle testgegevens, etc.). Zoals ik al tests uit te voeren, ik bijhouden van de gegevens toegevoegd aan de bekende stand. Deze gegevens worden opgeruimd aan het eind van elke test. Nadat alle tests voor de klas hebt uitgevoerd, een andere methode verwijdert alle testgegevens die in de dev database, waardoor het in de staat waarin het zich bevond voordat de tests werden uitgevoerd. Het is een beetje van het werk om dit alles te doen, maar ik meestal schrijf de methoden in een DBTestCommon klasse waar al mijn DAO testklassen kan krijgen voor hen.

antwoordde op 11/08/2008 om 14:30
bron van user

stemmen
1

Je zou kunnen proberen http://selenium.openqa.org/ het is meer voor de GUI testen in plaats van een datalaag test toepassing, maar heeft uw acties, die vervolgens kunnen worden afgespeeld om tests op verschillende platformen te automatiseren op te nemen.

antwoordde op 06/08/2008 om 13:06
bron van user

stemmen
1

Als je kunt het instellen van de database met een bekende hoeveelheid voorafgaand aan het uitvoeren van de testen en af ​​te breken aan het einde, dan zult u weten welke gegevens u mee werkt.

Dan kunt u gebruik maken van iets als Selenium om eenvoudig testen van uw UI (ervan uitgaande dat web-based hier, maar er zijn een heleboel UI test tools die er zijn voor andere UI-smaken) en het detecteren van de aanwezigheid van bepaalde verslagen terug uit de database getrokken.

Het is zeker de moeite waard het opzetten van hetzij een test versie van de database - of maak uw testscripts bevolken de database met bekende gegevens in het kader van de tests.

antwoordde op 05/08/2008 om 23:08
bron van user

stemmen
1

Ik heb precies hetzelfde probleem met mijn werk en ik vind dat het beste idee is om een ​​PHP-script opnieuw te maken van de database en vervolgens een aparte script waar ik gooi gek gegevens op om te zien of het breekt het.

Ik heb niet ooit een Unit testing gebruikt of dergelijke kan dus niet zeggen of het werkt of niet sorry.

antwoordde op 05/08/2008 om 23:03
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more