Laat

tdd PHP in een eenvoudige toepassing, om een eenvoudige toepassing van,,,,, - in de PHP 64,,,,,,, 44 aandelen,,,,,,, het netwerk van delen van maandag wat in tuts + koers zal dalen tot slechts drie dollar.Niet' niet missen, een deel van de prijs van een serie testen rijden PHP, phpdeciphering terminologie - en testen van automatische test, tijdens de les, ik zal de invoering van een eenvoudige toepassing - een eind - tot - voorbeelden in strikte tdd PHP.Ik zal bij elke stap gaan je een stap voor, keer op keer, en verklaren dat ik voor de vervulling van de taken die de beslissingen nemen.Voorbeeld volgt regels: - code te schrijven, de wederopbouw van schriftelijke tests,.,,,, - invoering van stap 1 & phpunit, tdd betekent, tdd - is een "test" en de technologische ontwikkeling van software.Het is bijna altijd in onze teams met soepele ontwikkeling van software, is een van de belangrijkste instrumenten.- ten eerste worden gedefinieerd, en de invoering van de Gemeenschap door professionele kent Beck in 2002.Sindsdien is het een erkende, in de programma 's voor de dagelijkse tdd heeft drie fundamentele beginselen:,, je kan niet schrijven een code, als er geen sprake is van een mislukte test om zeker te zijn, je mag het niet schrijven wat eenheid testen dan absoluut noodzakelijk is het te laten mislukken.Geen stellen /niet rennen, je mag het niet meer schrijven code dan strikt noodzakelijk is om de test niet door. En, phpunit, phpunit is een instrument waarmee de PHP eenheid testen en de test wordt de ontwikkeling en de praktijk.Het is een hele eenheid testen kader ter ondersteuning van de steun.Maar er zijn een paar keuzes, phpunit is een van de meest gebruikte vandaag PHP meest complete oplossingen, de installatie van phpunit, je kunt met voor ons - in "les PHP zitting, of je kan met de peren, als officiële documenten, worden uitgelegd:, wortel, of met behulp van de pseudo -, om ervoor te zorgen dat je de laatste peren, Peren Peren: verbetering van de automatische gevonden, configuratie, peren: 1, auto_discover installatie: installatie van pear.phpunit.de/phpunit phpunit, peren, de installatie van aanvullende modules van de code, en meer informatie in de officiële documenten en de richtlijn kan vinden. En, wat voor een Linux, phpunit, samengesteld pakket, hoewel ik heb de aanbevolen te installeren, door middel van peren, omdat het om ervoor te zorgen dat de- de recente en de laatste versie van de installatie en het gebruik, de kenmerken & phpunit, als je een fan bent van kenmerken, je kan de toewijzing van het werk en de phpunit volgens de volgende procedure:,, naar de toewijzing van kenmerken (instrumenten en opties) PHP /eenheid, test, check "phpunit script" wijst op een doeltreffende de uitvoering van de code.Als er geen, gekenmerkt zal je vertellen, als je niet gezien op de website van de aankondigingen van de rode, ben je klaar om te gaan.Zo niet, kijk in je systeem uitvoerbaar is en phpunit input in het veld weg.Voor een Linux - systemen, de weg is in het algemeen, /USR /bin /VI phpunit,,, als je niet met IDE en ondersteunende eenheid test, kun je direct uit de console test: CD /m /toepassing, phpunit /test /MAP, stap 2, om het probleem op te lossen, de taak van ons team is een uitvoering van de "...".,, in de veronderstelling dat we een grote onderneming, die een deel van een complexe van de ontwikkeling en het onderhoud van de toepassing.Ons team is verantwoordelijk voor de uitvoering van een "pakket".We willen niet dat de klanten het niveau van het geschrift, de inspanningen om te voldoen aan, en in dit geval, moeten we tot een soort, is de totstandkoming van een willekeurige plaats kan de tekst die als input.Het resultaat moet zijn met een gespecificeerde alfanumerieke.De woorden moeten worden gevolgd door andere voorschriften voor de verpakking van elke actie, zoals in de redactie van de tekst, de pagina 's tekst, onze klanten niet woord verpakking alle regels, maar ze weet dat ze het wilden, ze weten dat ze het moeten in andere toepassingen op dezelfde manier werken.,, salaristrap 3 - Planning - kan helpen. Dat je een beter ontwerp, maar het is niet de uitbanning van het ontwerp voor de manier van denken te veel programmeurs.,, een vergeten, ze beginnen na voorafgaande planning -, is dat.- bijdragen tot de verwezenlijking van een betere opzet van je, het grootste deel van de tijd, de codes met minder en de verificatie van de functie, maar het is niet voor het ontwerp en de uitbanning van moet denken, elke keer als je moet een probleem op te lossen, moet je de tijd om het ontwerp van een kleine, stel je niet wat hard maar genoeg om u te laten beginnen.Dit deel van het werk helpt je fantasie en dat kan gebeuren, als logische toepassing, laten we nadenken over de woorden van de fundamentele taken van een pakket regels.Ik wil niet de tekst zal ons pakken.We weten dat elke lijn een aantal tekens, we hopen dat het wordt verpakt.Dus, het eerste ding is, als de tekst heeft meer karakter, we moeten de toevoeging van een nieuwe lijn, niet in de laatste plaats de personages, oké, dit zal een samenvatting van de acties van het systeem, maar het is veel te ingewikkeld voor een test.Wanneer bijvoorbeeld een aantal woorden dan de maximaal toegestane tekens lang was?Nou...Dit ziet er uit als een marginale situatie; we kunnen niet met een nieuwe lijn in plaats van een ruimte, omdat we op deze lijn geen ruimte.We moeten met geweld om een einde te maken aan het woord, het breekt in twee van deze gedachte, moeten duidelijk genoeg, zodat we kunnen beginnen met de programmering.We moeten een project en een klas.We noemen het "pakket", en dan, stap 4, aan het begin van dit project, het creëren van een eerste test, laten we het creëren van het project.Er moet een bron van de belangrijkste dossiers, een test /MAP, en, natuurlijk, voor de test.Alle testen zijn onze toekomst zal worden opgenomen in het dossier, dus ik zal niet langer in deze richtsnoeren uitdrukkelijk vermeld.De naam van de testen, maar eenvoudig.En wrappertest, nu niet, onze eerste test ziet er als volgt uit:, require_once dirname (__file__). "///////verpakking. Php; uitbreiding van de functie van wrappertest phpunit_framework_testcase {testcancreateawrapper () {% verpakking = nieuwe verpakking ();}}, weet je nog?We mogen niet falen voor de test in een schrijven van de code, niet eens een soort verklaring.Dit is de reden waarom schreef ik een simpele test, bekend als de cancreateawrapper,.Sommige mensen denken dat dit een stap is, maar ik denk dat dit een goede gelegenheid is om na te denken over ons maken.We hebben een klasse?We moeten het noemen?Moet een statische ruis?Als je deze test, en je krijgt een fatale vergissing verkeerde informatie, zodat require_once (PHP): geen open vereiste /weg /wordwrapphp /test //verpakking. Php (include_path =':/USR /delen /PHP5:/USR /delen /PHP) /weg /wordwrapphp /test /wrappertest.php op lijn 3, ja.We moeten iets doen.Het creëren van een lege, de verpakking, het project de belangrijkste dossiers in de klasse, van de klasse van de verpakking {}, dat is het.Als je nog een test doen, gaat het door.Gefeliciteerd met Je eerste test.5, stap, de eerste echte test, dus hebben we de oprichting en de werking van de projecten; nu moeten we nadenken over hoe we de eerste echte test, wat is de meest eenvoudige dom... De meest fundamentele test zal ons nu de code niet?Nou, de eerste is ", geef het een kort genoeg, en het gewenste resultaat is onveranderd," dat klinkt haalbaar zijn; laten we schriftelijke tests, require_once dirname (__file__). "///////verpakking. Php; uitbreiding van de functie van wrappertest phpunit_framework_testcase {testdoesnotwrapashorterthanmaxcharsword () {% verpakking = nieuwe verpakking (), dat ('word, $verpakking - > Pack ('word ", 5));}}, nogal ingewikkeld.De naam van de functie van "maxchars" betekent?Wat, vijf, in, de verpakking, de methode is?En ik denk dat hier niet zo goed.Kunnen we nog één simpele test?- ja, natuurlijk.Als we de verpakking...Geen lege string?Dat klinkt goed.Het schrappen van meer complexe test, integendeel, de toevoeging van nieuwe, eenvoudige, zoals hieronder aangegeven: dirname, require_once (__file__). "///////verpakking. Php; uitbreiding van de functie van wrappertest phpunit_framework_testcase {testitshouldwrapanemptystring () {% verpakking = nieuwe verpakking (); de dollar - > dat het (", - dollar Packaging > Pack ());}}, dat is beter.De naam van de test is gemakkelijk te begrijpen, we hebben geen magische touw of digitale, wat belangrijk is, is dat het niet kan.En de fatale fout: noemen is niet omschreven methode: WRAP () in de verpakking:..., zoals je kan zien, heb ik het schrappen van onze eerste test.Het is nutteloos, duidelijk te controleren, als een object kan worden gestart, en als de andere tests moet het ook.Dit is normaal.In de loop van de tijd, zal je vinden, het schrappen van de test is een gemeenschappelijke zaak.Tests, met name de eenheid testen, moet snel - snel.Vaak, heel vaak.Met dit in gedachten, ontslagen in de test is belangrijk.Stel je voor, als je de tijd besparen van het project, elke keer dat je om een paar duizend keer.Het zou niet meer dan een paar minuten, Max, als ze op de vlucht.Dus, wees niet bang om het schrappen van een test, indien nodig, we moeten terug naar de codes van de producten, laten testen, verpakking {pakket ($tekst) {terugkeer;}}, we hebben nog meer, helemaal niets meer van de code om te slagen voor de test, is het noodzakelijk stap 6, druk. Nu, in het kader van een mislukte test. Functie: testitdoesnotwrapashortenoughword () {% verpakking = nieuwe verpakking (); de dollar - > dat het ('word, $verpakking - > Pack ('word ", 5));}, falen, nieuws: de woorden zeggen nul komt overeen met de verwachtingen, en de code. Het pakket, de functie van ($tekst) {terug van de tekst;}, WOW!Dat is makkelijk, is het niet?En onze groene, aan onze test code kan beginnen te rotten. We moeten voor de wederopbouw van sommige dingen.Onthoud: als je altijd de wederopbouw getest; dit is weet je zeker dat je de juiste aanpak van de wederopbouw van de enige. Ten eerste, laten we ontdoen van de verpakking voorwerpen te kopiëren.Dat kunnen we doen, val (), slechts een van de methoden en het gebruik van het testen van de twee categorieën uit te breiden, wrappertest phpunit_framework_testcase {particuliere $verpakking; de functionele opzet () {% dit > verpakking = nieuwe verpakking (functie);} testitshouldwrapanemptystring () {% dit > Dat het ("dollar - > de verpakking - > Pack ()); de functie van testitdoesnotwrapashortenoughword (}) {% dit > dat het ('word dollar - pakket - > > Pack ('word", 5);}}, en van de methode om elke nieuwe tests voor de,,., een tweede test een dubbelzinnig standpunt.Wat is "weg"?Wat is "5"?Laten we duidelijk maken dat bij het lezen van de test onder een programmeur niet raden, vergeet nooit dat je de test ook de meest bijgewerkt document voor je code.En een andere programmeur moet kunnen lezen, zullen ze het lezen van de tekst van de test, zo makkelijk testitdoesnotwrapashortenoughword (functie) {% texttobeparsed = "het woord"; maxlinelength dollar = 5 dollar - > dat het (texttobeparsed dollar - verpakking - > > Pack (texttobeparsed dollar, maxlinelength dollar);} en nu, opnieuw lezen van deze verklaring.Dat lezen, oké?Natuurlijk.Niet voor je examen over lange naam automatisch is je vriend.De beste beschrijving is mogelijk, nu, in het kader van een mislukte test. Functie: testitwrapsawordlongerthanlinelength () {% texttobeparsed = "alongword"; maxlinelength dollar = 5 dollar - > dat het ("- woord" dollar - pakket - > > het pakket ($texttobeparsed, maxlinelength dollar);}), en de code, zodat het door de verpakking (tekst, functie, de lengte van de lijn ($) {als strlen ($tekst) > de lengte van de lijn naar substr ($) 0 dollar, de tekst, de lengte van de lijn).- ".Substr (tekst terug te keren naar de tekst; de lengte van de lijn, $dollar);}, is het duidelijk dat we de code, en, tot slot, de test.Maar wees voorzichtig - dit is de eerste test voor ons de code, en niet door.We hebben twee opties voor de oplossing van het probleem: de wijziging van de code -, zodat de twee facultatieve parameters, tot wijziging van de eerste test - en die code en parameters voor de selectie van de eerste optie, als je de facultatieve parameters die een klein probleem, op dit moment van de code.Een facultatieve parameter is een standaard gestart.Wat is die waard?- klinkt logisch, maar het zou betekenen dat de code gewoon voor de behandeling van deze zaak.De vaststelling van een zeer groot bedrag, zodat de eerste, als de verklaring niet tot echte kan een andere oplossing.Maar, dit nummer is?10 is?10.000?Is tien miljoen.We kunnen echt niet zeggen dat, rekening houdend met alle amendementen, maar ik test: ten eerste, de functie testitshouldwrapanemptystring () {% dit > dat het ("dollar - pakket - > > Pack (", 0);}, nogmaals, de groene.Kunnen we nu verder gaan met de volgende test.Wij zijn ervan overtuigd dat, als we er een lang woord, het zal met een paar rijen. Functie testitwrapsawordseveraltimesifitstoolong () {% texttobeparsed = "averyverylongword"; maxlinelength dollar = 5 dollar - > dat het "nveryl, nongwo, Avery (NRD" dollar - > de verpakking, GT; (texttobeparsed dollar. De dollar maxlinelength));}, dit is duidelijk niet de werkelijke productie, omdat we de code. Maar één keer, niet twee of gelijk is aan dat touw.- de verwachte + realiteit @ @ @ @ Avery. - erg - Ongwo van + verylongword ", ruik je het, terwijl de ring?Oké, denk er nog eens over na.Is een van de meest eenvoudige, maar het verkeer van de code, die de test?In het kader van de herstructurering van de prioriteit ", (van Robert C. Martin), dit is het niet.Herhaling, is altijd beter dan een ring, eenvoudiger en beter te kunnen testen, kenmerk verpakking (tekst, de lengte van de lijn ($) {als strlen ($tekst) > de lengte van de lijn naar substr ($) 0 dollar, de tekst, de lengte van de lijn).- ".De dollar - > Pack (substr ($tekst, lengte van de lijn, de lengte van de lijn dollar) USD); de tekst terug te keren;}, kun je iets veranderen?Dit is een simpele.Wat wij doen, in plaats van met de rest van het touw, zullen we de rest van het touw terug door een beroep te doen op hun waarde.Perfect.,,, - 7 - slechts twee woorden, een van de meest simpele test?Die twee woorden kunnen worden gebruikt, als er eindelijk een functie van de ruimte, testitwrapstwowordswhenspaceattheendofline () {% texttobeparsed = "het woord"; maxlinelength dollar = 5 dollar - > ("het woord dat het woord" dollar - pakket - > > het pakket ($texttobeparsed, maxlinelength dollar);}, past.De oplossing is echter kan heel koppig zijn, op dit moment, in de eerste plaats, je kan verwijzen, str_replace (), uit de ruimte en is er een nieuwe regel.Niet, dat de weg naar een doodlopende straat, ten tweede, de meest voor de hand liggende keuze is een, als die verklaring.Wat gebeurd is, is dat het pakket (tekst, functie, de lengte van de lijn ($) {als deze code, die de tekst ") = = $linelength terug substr () voor de tekst van deze code,, ($tekst") ".- ".De dollar - > Pack (substr (tekst van deze code ($tekst ") + 1 dollar), de lengte van de lijn (strlen ($); indien de tekst) > de lengte van de lijn naar substr ($) 0 dollar, de tekst, de lengte van de lijn).- ".De dollar - > Pack (substr ($tekst, lengte van de lijn, de lengte van de lijn dollar) USD); de tekst terug te keren;}, maar in een cyclus van de dood, dit zal leiden tot de testen fout, fout kan 134217728 PHP geheugen byte uitgeput, op dit moment, moeten we er rekening mee houden.Het probleem is, we hebben een eerste test voor de lengte van de tekst is nul.Ondertussen, in deze code (), vals, als het touw niet vinden.- dan valse...Is?Echt,.Dit is niet goed voor ons, omdat het verkeer is oneindig.De oplossing?Laten we de eerste voorwaarden veranderen.Op zoek naar een ruimte met het standpunt en de lengte van de lijn te vergelijken, laten we proberen om de lengte van de directe karakter - standpunt.We doen het, substr (), slechts een karakter van de tekst van een geschikte plaats in de tas, functie ($dollar {zoals de tekst, de lengte van de lijn) (substr ($1 dollar van de tekst, de lengte van de lijn, 1) = = ") substr ($50 dollar terug, deze code (tekst tekst," ")".- ".De dollar - > Pack (substr (tekst van deze code ($tekst ") + 1 dollar), de lengte van de lijn (strlen ($); indien de tekst) > de lengte van de lijn naar substr ($) 0 dollar, de tekst, de lengte van de lijn).- ".De dollar - > Pack (substr ($tekst, lengte van de lijn, de lengte van de lijn dollar) USD); de tekst terug te keren;}, maar het einde van de lijn, als de ruimte is niet goed?En testitwrapstwowordswhenlineendisafterfirstword () {% texttobeparsed = "het woord"; maxlinelength dollar = 7; de dollar - > ("het woord dat het woord" dollar - pakket - > > Pack (texttobeparsed dollar maxlinelength));}, hè.We moeten de aanpassing van onze voorwaarden.Ik denk dat we moeten doorzoeken, immers, de ruimte van de positie van mensen.Het pakket, de functie van (tekst, de lengte van de lijn ($) {als strlen ($tekst) > de lengte van de lijn ($) (als deze code (substr (, 0), de tekst, lengte van de lijn), ").= 0) substr (tekst terug, 0, deze code ($tekst ")".- ".De dollar - > Pack (substr (tekst van deze code ($tekst ") + 1 dollar), de lengte van de lijn); substr (tekst terug, 0 dollar, de lengte van de lijn).- ".De dollar - > Pack (substr ($tekst, lengte van de lijn, de lengte van de lijn dollar); de tekst terug te keren naar de dollar)};}, WOW!Het echte werk.Wij in de tweede voorwaarde van mobiele de eerste voorwaarde om te voorkomen dat de eindeloze cyclus, hebben we extra ruimte zoeken.Maar het ziet er erg lelijk.Het nest?WOW.Dit is een tijd van de functie van de wederopbouw, het pakket (tekst, de lengte van de lijn ($) {als strlen ($tekst) < = $linelength) terug te keren naar de tekst; als (deze code (substr (, 0), de tekst, lengte van de lijn), ").= 0) substr (tekst terug, 0, deze code ($tekst ")".- ".De dollar - > Pack (substr (tekst van deze code ($tekst ") + 1 dollar), de lengte van de lijn); substr (tekst terug, 0 dollar, de lengte van de lijn).- ".De dollar - > Pack (substr ($tekst, lengte van de lijn, de lengte van de lijn dollar) USD);}, dat is beter.,,, salaristrap 8 - woord?En er is geen slecht, kan worden beschouwd als een test van het,,, een van de meest simpele test, zijn er drie woorden van de verpakking drie rijen.Maar de test.Weet je het, je moet het schrijven van een test?Het grootste deel van de tijd, niet. Maar als je vragen hebt, of je kunt voorstellen tot verandering, zal de nieuwe tests niet door andere mensen, en schrijf het op.Geen slecht resultaat is het schrijven van een test.Bovendien, rekening houdend met de test van je is dat je documenten.Als je de logica van de test is een belangrijk deel, dan om het te schrijven.Trouwens, het feit dat wij de voorgestelde test is het een teken is, we zijn dicht bij een oplossing.Natuurlijk, als je er een algoritme, een test, we schrijven nu drie woorden, door twee lijn en het einde van de laatste zin van binnen, nu, niet testitwraps3wordson2lines (functie) {% texttobeparsed = "het woord"; maxlinelength dollar = 12; de dollar - > dat het ("de woorden" synoniemen, dollar - verpakking - > > Pack (texttobeparsed dollar maxlinelength));}, ik denk dat bijna een baan.Als we het onderzoek van deze fout, we krijgen een bewering dat is: gelijkheid van mannen en vrouwen.- de verwachte + realiteit @ @ @ @ -'word woorden +'word + ", ja.We moeten op één lijn de ruimte aan de rechterkant van de functie van de verpakking (tekst, de lengte van de lijn ($) {als strlen ($tekst) < = $linelength) terug te keren naar de tekst; als (deze code (substr (, 0), de tekst, lengte van De lijn), ").= 0) substr (tekst terug, 0 sub ($tekst ")".- ".De dollar - > Pack (substr (tekst, sub ($tekst ") + 1 dollar), de lengte van de lijn); substr (tekst terug, 0 dollar, de lengte van de lijn).- ".De dollar - > Pack (substr ($tekst, lengte van de lijn, de lengte van de lijn dollar) USD);}, slechts ter vervanging van deze code (s),,, strrpos (), en, ten tweede, als de verklaring, stap 9., - andere niet door de test?De rand gevallen?En als dingen moeilijk worden.Het vinden van een mislukte test is moeilijk...Of een test, omdat dit ding, dit is nog niet geschreven, is dit een teken dat we zijn heel dicht bij een definitieve oplossing te vinden.Maar, Hé, ik dacht alleen aan een test, zal mislukken.En testitwraps2wordson3lines () {% texttobeparsed = "het woord"; maxlinelength dollar = 3; de dollar - > dat het (",,, neodymium en nwor" dollar - pakket - > > Pack (texttobeparsed dollar maxlinelength));}, maar ik had het mis.Het is voorbij.Nou.Als we het doen?Wacht.Dit is een?En testitwraps2wordsatboundry () {% texttobeparsed = "het woord"; maxlinelength dollar = 4; de dollar - > ("het woord dat het woord" dollar - pakket - > > Pack (texttobeparsed dollar maxlinelength));}, het is mislukt.Geweldig.Wanneer een bank en een woord van dezelfde lengte en, naar wij hopen, de tweede niet beginnen met een lege ruimte.- de verwachte + realiteit @ @ @ @ "- woord + + D, zijn er een aantal oplossingen.We kunnen de invoering van een andere, als de verklaringen te controleren, vanaf de ruimte.Dit zou in overeenstemming zijn met de voorwaarden van de rest van de we gecreëerd hebben.Maar er is geen sprake van een eenvoudige oplossing?Als we gewoon knippen (), de tekst?Het pakket, de functie van (tekst, de lengte van de lijn dollar) {% tekst = decoratie ($tekst); als (strlen ($tekst) < = $linelength) terug te keren naar de tekst; als (deze code (substr (, 0), de tekst, lengte van de lijn), ").= 0) substr (tekst terug, 0 sub ($tekst ")".- ".De dollar - > Pack (substr (tekst, sub ($tekst ") + 1 dollar), de lengte van de lijn); substr (tekst terug, 0 dollar, de lengte van de lijn).- ".De dollar - > Pack (substr ($tekst, lengte van de lijn, de lengte van de lijn dollar) USD);}, laten we gaan.,, 10 stappen we klaar zijn, op dit punt, ik kan het niet aanzien voor de test niet schrijven.Wat we moeten doen.- we gebruiken nu om een eenvoudige, maar erg nuttig, zes van de online - algoritme. Stop en een paar woorden "doen." als je je eigen tdd, gedwongen over allerlei dingen.Je schreef voor deze situatie en testen, en in de loop van dit probleem beter begin te begrijpen.Meestal, dit proces zal leiden tot een intieme kennis van de algoritme.Als je het niet op een andere test gefaald, betekent dat, dat je het algoritme is perfect?Niet nodig, tenzij er sprake is van een vooraf vastgestelde regels.Om ervoor te zorgen dat de insecten niet minder - code; het helpt je beter code, je kan beter te begrijpen en te wijzigen.Beter zelfs, als je een fout maakt, is het gemakkelijker het schrijven van een test, een kopie van de fouten.Dus, kan je er voor zorgen dat de fout niet nogmaals gebeuren, omdat je al getest.Ten slotte, notities, je denkt misschien dat dit proces is niet "tdd." je hebt gelijk!Dit voorbeeld dichter bij het dagelijkse werk van de programmeurs.Als je wilt dat een echte "tdd - als je bedoelt," in de volgende voorbeelden, alsjeblieft, laat uw opmerkingen, ben ik van plan een schrijven in de toekomst, dank u voor te lezen.,





Previous:
Next Page: