Code: sanering van oude code 4

, wederopbouw: 4 - onze eerste test,,,,,,,,,, 51, 18 - eenheid,,,,,,,, de delen van het netwerk, maandag wat in tuts + koers zal dalen tot slechts drie dollar.Niet' dit artikel niet missen, is dat een reeks voor de wederopbouw van een deel van de oude code. De wederopbouw van oudere code: 3 - complex conditionalsrefactoring oudere code: 5 spel en' voor het testen van de oude code.De code is lelijk.Een complexe code.Spaghetti - code.Bla, bla.Twee woorden, oude code.Dit is een reeks, zal je helpen met het werk en de oude code. Een cruciaal moment, was toen we begonnen winning van kleine stukjes, we beginnen met de voorbereiding van de eenheid voor deze kleine stukjes te testen.Maar dat is erg moeilijk, met name wanneer je een code te schrijven, dus het zal moeilijk zijn opgesteld of werking van stukken, als verloren.We kunnen niet veilig voor een grote operatie code, we begrijpen het nog steeds niet, alleen een gouden God testen, zodat we het helemaal uit.Gelukkig is er een aantal technische kan ons helpen, dit is een eenheid testen?In de automatisering in de loop van de geschiedenis, de afgelopen 20 jaar, de terminologie, de eenheid, in vele opzichten heeft de definitie.Ten eerste, het is in het kader van de code betreffende het testen van uitoefening.Test van de eenheid is een test, een bepaalde taal de kleinste eenheid.,, in die zin dat PHP, eenheid testen is een functie voor het testen of de oefeningen.Als we in een object in de stijl van de programmering, onze functie is in de categorie van de in de organisatie.Een soort van alle in verband met de test wordt vaak genoemd als een test, waarvan er een andere definitie, 25, eenheid testen, dus we zullen niet in elke.Hoewel deze definitie is anders, maar ze hebben iets gemeenschappelijk.Dit heeft geleid tot een eenheid te testen is een test, in een paar milliseconden test, een deel van de code in een isolement, we moeten aandacht besteden aan de twee sleutelwoorden: de definitie van MS - onze test moet snel, heel snel, en het isolement van de code - moeten we testen we zoveel mogelijk gescheiden.Deze twee sleutelwoorden zijn complementair, aangezien het om de testsnelheid moet lager zijn.De database, communicatie, interfaces, ze gewoon langzaam, op deze manier te testen.We moeten de code te vinden en voldoende klein stuk, zodat we kunnen worden opgesteld (indien nodig) en de code op de milliseconde te zijn, in minder dan tien milliseconden, want dit is een honderd.We testen kader wordt in de code die de toevoeging van een geringe netto kosten, maar dit is te verwaarlozen.De identificatiecode voor de eenheid getest, en het vinden van het isolement van de structuur, als de code om te testen, aanbevelingen door de opstelling van een code, we kunnen het testen.Dit zal ons helpen om de dekking te beginnen, en het zal ook dwingt ons te concentreren en het begrip kleine fragmenten van de code.Weet je nog, we zijn opgebouwd, we willen niet veranderen.In feite, stap in die we niet willen veranderen we de code op alle mogelijk, we moeten onze analyse, de drie documenten, kijken of er iets is wat we kunnen dingen proeven.,,, gamerunner.php, eigenlijk geen logica.We creëren een delegatie van het gewoon.We kunnen de test?Natuurlijk kunnen we dat.We moeten testen?Nee, dat moeten we niet doen. Zelfs als sommige methoden kunnen worden op het niveau van de technologie, testen, als er geen logische, kunnen we ook niet willen ze testen.,,, runnerfunctions.php, is een ander verhaal.Er zijn twee functies.Het (de), de functie, het is een grote, een algemene werking van het systeem.Dit kunnen we niet makkelijk dingen proeven.En het niet terug, het is de produktie op het scherm, dus we moeten het vastleggen van de en de vergelijking van de touwtjes in handen.Dit is niet de typische eenheid testen.Aan de andere kant, iscurrentanswercorrect (), de terugkeer van een simpel feit of bepaalde voorwaarden, gebaseerd op valse.We kunnen de test?,, functionele iscurrentanswercorrect () {% minanswerid = 0 dollar = 9 dollar; maxanswerid; wronganswerid = 7; terug naar de rand (minanswerid dollar maxanswerid).= $wronganswerid;}, we hebben begrepen dat deze code, die een willekeurige nummers en vergelijking van de schuld van het id.,,, stap 1, ga, goldenmastertest.php, Mark heeft alle testen.We willen niet de werking van het hun tijd is.Toen we begonnen met de bouw van een eenheid bij het testen van de werking van de ", zullen we ons meer geld" zelden.Als we schreef een nieuwe test, we niet de wijziging van de codes van de producten en snelle feedback is belangrijk.,,, stap 2, het creëren van een nieuwe test, runnerfunctionstest.php, we testen, catalogi, en goldenmastertest PHP,,.Nu denk je dat je dat kan schrijven van de meest simpele test code.Wat is het minimum van de operatie?Nou, het is zo require_once:,, __dir__. "////////PHP /runnerfunctions kleinigheden. Php; uitbreiding van de functie van runnerfunctionstest phpunit_framework_testcase testitcanfindcorrectanswer () {} {}, wat we nodig hebben, runnerfunctions.php, documenten, zodat we het kunnen testen, met en zonder een fout is geslopen.De rest van de code is een monster, maar een kader en een lege test.Maar, nu?Wat doen we nu?Weet je, hoe kunnen we de truc, rand (), terug naar wat we willen?Ik weet het nog niet.Dus, laten we onderzoeken hoe het werkt, we weten hoe dat zaad van willekeurige generator, dus als we het proberen met een digitale zaad, van het werk?We kunnen in onze tests om erachter te komen hoe dingen schrijf code, de functie, het testitcanfindcorrectanswer () {srand (0); var_dump (rand (0,9)); srand (1); var_dump (rand (0,9)); srand (2); var_dump (rand (0,9)); var_dump srand (3); (Lander (0,9)); srand (4); var_dump (rand (0,9));}, en we weten ook dat we de problemen tussen negen en id is nul.Dit zal leiden tot de volgende resultaten.,, int (8) int (8) int (7) int (5) int (9),,,, ziet er niet erg duidelijk.In feite denk ik niet dat de logica van de manier waarop wij de waarden, de rand (), de functie zal leiden.We zullen ons de code moet worden gewijzigd, dan kunnen we onze waarden nodig, afhankelijkheid en de afhankelijkheid van de injectie, terwijl de meeste mensen praten over de "afhankelijke", dat de verbinding tussen de van hun klasse.Dit is de meest voorkomende geval, met name de gerichte programma 's.Maar als we dit woord in het algemeen een beetje.Vergeet klassen, vergeten voorwerpen, alleen betrekking op "afhankelijke" betekent.Wij, Oostlander (minimale en maximale). De methode is?Dit hangt af van een waarde van 2.De minimale en maximale waarden.,, kunnen we de rand () controle, door deze twee parameters?Nee, de rand (), maar de terugkeer naar hetzelfde nummer als de minimale en maximale is hetzelfde?Laten we kijken, functie, testitcanfindcorrectanswer () {var_dump (rand (0,0)); var_dump (rand (1,1)); var_dump (rand (2,2)); var_dump (rand (3,3)); var_dump (rand (4,4));}, en als we gelijk hebben, elke regel moet het cijfer nul Tot vier op voorspelbare manieren. (0) int, int, int (1) (2) (3) int int (4), is voorzien, lijkt me.Door het sturen van dezelfde hoeveelheid van de minimale en maximale waarden voor, de rand (), kunnen we het gewenste aantal.Nu, hoe we dit kunnen bereiken?Het is geen argument.Misschien is de meest voorkomende vorm van injectie afhankelijk van de methode is het gebruik van standaard - waarden van de parameters.Het zal redden van de huidige functie, maar kunnen we ons bij het testen van de stroom.,, functionele iscurrentanswercorrect ($minanswerid = 0, maxanswerid dollar = 9) {% wronganswerid = 7; terug naar de rand (minanswerid dollar maxanswerid).= $wronganswerid;}, gewijzigd, iscurrentanswercorrect (), en op die manier zal het behoud van de huidige activiteiten op dezelfde tijd, laten we het testen.Je kan de werking van uw goud, en de heer M.De code is veranderd, moeten we ervoor zorgen dat we het niet te breken, we iscurrentanswercorrect (.,,), nu lijkt het, test het stuur gewoon elke mogelijke waarde van de tien terug van de rand (),,,., de functie van testitcanfindcorrectanswer () {% dit > asserttrue (iscurrentanswercorrect (0,0)); de dollar - > asserttrue (iscurrentanswercorrect (1,1)); de dollar - > asserttrue (iscurrentanswercorrect (2,2)); de dollar - > asserttrue (iscurrentanswercorrect (3,3)); de dollar - > asserttrue (iscurrentanswercorrect (4,4)); de dollar - > asserttrue (iscurrentanswercorrect (5)); de dollar - *; asserttrue (iscurrentanswercorrect (6,6)); de dollar - > assertfalse (iscurrentanswercorrect (7,7)); de dollar - > asserttrue (iscurrentanswercorrect (8,8);De dollar - > asserttrue (iscurrentanswercorrect (9,9);}, de functie van de lijn door, testen, die we na de voltooiing van de test.Nu, onze test is zeer snel, we kunnen ze bijna continu.Een praktisch instrument voor test, zo spoedig mogelijk in een dossier, ik heb gehoord dat ze de programmeur die loopt van de testen, en ze was aan het einde van elk besluit in de test de status zien.Wanneer je van plan bent weet je wat te verwachten, als de test niet groen als je denkt dat het moet, wat je gedaan hebt.Ze ziet er erg nerveus de feedback, is bijna zeker, in de laatste regel of om hun schreef iets mis is, maar het klinkt extreem testen in ontwikkeling, denk ik dat het nuttig is, met name wanneer je de ontwikkeling van algoritme.Persoonlijk ben ik geneigd om door middel van een kortere weg rennen voor mijn test, één van de sleutels.Als de test, om me te helpen de ontwikkeling van programma 's, en ik heb de test van de kortere weg, F1,,,, laten we terug gaan naar onze zaken.Dit is een test, tien beweringen, die op ongeveer 66 milliseconden 6.6 milliseconden, elke bewering.Elke bewering noemen en de uitvoering van een deel van onze code.Dit lijkt ons de definitie van de eenheid getest in deze les.,, vind je dat assertfalse (), nummer zeven?Ik durf te wedden dat je de helft van de mensen missen.Het is diep begraven in een hoop andere beweringen.Het is erg moeilijk te vinden.Ik dacht dat het de moeite waard jezelf testen, dus we duidelijk enkele verkeerde antwoorden, functie, testitcanfindcorrectanswer. () {% dit > asserttrue (iscurrentanswercorrect (0, 0); $) - > asserttrue (iscurrentanswercorrect (1 1); $) - > asserttrue (iscurrentanswercorrect (2); $) - > asserttrue (iscurrentanswercorrect (3); $) - > asserttrue (iscurrentanswercorrect (4); $) - > asserttrue (iscurrentanswercorrect (5); d) - > asserttrue (iscurrentanswercorrect (6); $) - asserttrue > (iscurrentanswercorrect (8); $) - > asserttrue (iscurrentanswercorrect (9)); de functie van testitcanfindwronganser (}) {% dit > assertfalse (iscurrentanswercorrect (7));}, het testen, de wederopbouw, we.In het streven naar herstructurering, waardoor de code beter en gemakkelijker te begrijpen, moeten we niet vergeten dat onze test.Ze is net zo belangrijk als de productie en onze code.We moeten vasthouden aan onze test van schone en gemakkelijk te begrijpen.We moeten voor de wederopbouw van onze test, moeten we zo snel mogelijk voor ons aan dat er iets mis is, maar als ze in de buurt.Deze code kan worden geverifieerd, productie van onze test.Als we er een groene test, en we zullen het rood wordt, breken we de test.Kunnen we een paar stappen ongedaan te maken, probeer het nog een keer.,, kunnen we de juiste antwoorden - extractie van een installatie wordt gebruikt voor de productie van de juiste antwoorden.,, functie testitcanfindcorrectanswer () {% correctanserids = [0, 1, 2, 3, 4, 5, 6, 8, 9]; voor (correctanserids dollar als $) {% dit > asserttrue (iscurrentanswercorrect ($, $);}}, na, ook de invoering van een logica.Misschien kunnen we in een gewoonte dat gewonnen.Dit kan een beetje extreem, zo 'n simpele test, maar het is een goede gelegenheid om het concept van de functie van testitcanfindcorrectanswer.,, () {% correctanserids = [0, 1, 2, 3, 4, 5, 6, 8, 9]; de dollar - > assertanswersarecorrectfor ($correctanserids) testitcanfindwronganser (functie);} {% dit > assertfalse (iscurrentanswercorrect (7));} privé functie assertanswersarecorrectfor ($correctanserids) {voor (correctanserids dollar id) {% dit > asserttrue (iscurrentanswercorrect ($, $);}}, en nu, dit helpt ons in twee een verband.Ten eerste, we hebben in een reeks van elk van de elementen van een logische overgang naar een privé - methode.Als we aan het einde van de les, we meestal behouden hun eigen methode voor de geavanceerde, op logische wijze, zijn wij er in geslaagd de produktie van onze test.Bij het testen van methoden, kan ons niet schelen hoe de juistheid gecontroleerd.Onze zorg is de ID 's moeten vertegenwoordigers van de juiste antwoorden.Ten tweede is de doorbraak van de voorbereiding.Tijdens de tests om de juiste antwoorden, om ons te helpen moeten we testen in de veronderstelling van de details van de code, die de afhankelijkheid van de test, een van de meest voorkomende fouten in de Verenigde Staten, een schriftelijke test, is het voor de productie van de code te herhalen.Dit is een verdubbeling van de code en de afhankelijkheid van een verborgen, zoals meestal het geval is, in bepaalde of een normale waarde.In ons geval, afhankelijk van het antwoord dat de verkeerde antwoorden, maar om te bewijzen dat deze afhankelijkheid?Op het eerste gezicht, het leek gewoon een simpele herhaling een waarde is.Als antwoord op je problemen, stel jezelf de vraag: "als ik besluit om een fout antwoord, M 'n examen?",.Natuurlijk, het antwoord is nee. In de code veranderd van een eenvoudige, niet van invloed zijn op het gedrag van, of de logica.Dus, de test mag niet falen.Maar hoe?De eenvoudigste methode is om de vereiste variabelen als de variabele, de beste statische of constant is.In ons geval, hebben we geen les, kunnen we een van de variabelen of constante include_once.,, __dir__. "/spel. Php; een totaal wrong_answer_id = 7; de functionele iscurrentanswercorrect (minanswerid = 0 dollar, maxanswerid = 9) {terugkeer - Afrikaanse (ongeveer minanswerid, maxanswerid dollar).= wrong_answer_id; de functie van het (de) ///////} {...De eerste keer, /), gewijzigd, runnerfunctions.php, documenten, iscurrentanswercorrect (), zal gebruik maken van een lokale variabelen constant.Dan Ren je eenheid testen.Dit om ervoor te zorgen dat we de code voor de veranderingen en heb niets gebroken.Nu is de duur van de test. Testitcanfindwronganswer, functie, () {% dit > assertfalse (iscurrentanswercorrect (wrong_answer_id, wrong_answer_id));}, gewijzigd, testitcanfindwronganswer (,), het gebruik van dezelfde constante.Als het dossier, runnerfunctions.php, met inbegrip van de test met de constante van documenten, verklaringen tijdens de test, test, de toegang tot de wederopbouw. (opnieuw), en nu, we rekenen op, wrong_answer_id, ik, testitcanfindwronganswer (), moeten we niet de wederopbouw van onze test, testitcanfindcorrectanswer (), hangt ook af van de constanten van dezelfde?We moeten zijn.Het is niet alleen ons testen gemakkelijker te begrijpen, het maakt het sterker.Ja, want als we kiezen voor een fout antwoord is op de definitie van de test id in het juiste antwoord op de lijst, dit specifieke geval zal de test niet, terwijl de code nog steeds gelijk. Runnerfunctionstest, klasse, uitbreiding van de functie van phpunit_framework_testcase {testitcanfindcorrectanswer () {% correctanserids = dollar - > getgoodanswerids (); de dollar - > assertanswersarecorrectfor ($correctanserids);} privé functie getgoodanswerids () {terugkeer [0, 1, 2, 3, 4, 5, 6, 8, 9];}}, en met het juiste antwoord bij het testen van de functie zelf is een goed idee, Op een aantal punten. Als we veranderen onze toenemende afhankelijkheid van de test van de code van de waarde van de productie die we ookNT verborgen cijfers met betrekking tot de details.De eerste stap is van toepassing voor de wederopbouw en de methoden voor de extractie en zelf, voor de uitbreiding van runnerfunctionstest.,, phpunit_framework_testcase {functie testitcanfindcorrectanswer () {% correctanserids = dollar - > getgoodanswerids (); de dollar - > assertanswersarecorrectfor ($correctanserids);} privé functie getgoodanswerids () {terug array_diff (bereik (0,9), [wrong_answer_id]);}}, we veranderen, getgoodanswerids (), aanzienlijk.Ten eerste, wij die lijst, range (), in de plaats van de input van alle mogelijke ID 's.En dan wordt afgetrokken van de reeks elementen bevat wrong_answer_id,.Nu, het juiste antwoord op de lijst staat in de verkeerde antwoorden, maar ook met de identiteitskaart van een waarde van te maken, maar dit is niet genoeg?De minimale en maximale id? Wat is dat?Moeten we niet op dezelfde wijze worden gewonnen?Oké, laten we eens kijken, include_once., __dir__. "/spel. Php; een totaal wrong_answer_id = 7; een totaal min_answer_id = 0; een totaal max_answer_id = 9; de functionele iscurrentanswercorrect ($minanswerid = min_answer_id, maxanswerid dollar = max_answer_id) {terugkeer - Afrikaanse (ongeveer minanswerid, maxanswerid dollar).= wrong_answer_id; de functie van het (de) ///////} {...//////////////////////////////////////////////////////////////////////.Een constante is als een functie van de parameters van de standaardwaarden, iscurrentanswercorrect ().Dit is nog steeds ons in staat de waarde van de in de test is nodig, en het is ook duidelijk dat deze parameters. Het betekent niets.Als een goede bijwerkingen, op de Top van het dossier constant kleine begint te benadrukken, runnerfunctions.php sleutels, documenten worden gebruikt.Heel goed.,, maar vergeet niet opnieuw kunnen de belangrijkste test van goud, testoutputmatchesgoldenmaster (), de functie van testen.We worden in de belangrijkste test constant alleen goud.We testen de eenheid van deze waarde in feite altijd snel.,, nu moeten we de test met een constante actualisering van de eenheid, runnerfunctionstest uitbreiding, klasse. Phpunit_framework_testcase {functie testitcanfindcorrectanswer () {% correctanserids = dollar - > getgoodanswerids (); de dollar - > assertanswersarecorrectfor ($correctanserids);} privé functie getgoodanswerids () {terug array_diff (bereik (min_answer_id, max_answer_id), [wrong_answer_id]);}},, het is eenvoudig.We moeten alleen de parameters, range (). De methode.Wat we kunnen doen, is de laatste stap in de test, we blijven, en is het onze, testitcanfindcorrectanswer (), verwarring, functie, testitcanfindcorrectanswer. () {% correctanserids = dollar - > getgoodanswerids (); de dollar - > assertanswersarecorrectfor ($correctanserids);}, kunnen wij zien deze Code twee grote problemen.De eerste naam niet eens.Als we de juiste antwoorden te noemen, dan noemen we het "Oké".We moeten beide een besluit in.Lijkt meer in overeenstemming met de juiste grammatica.Het is het tegenovergestelde van de verkeerde, maar goed is niet slecht. Runnerfunctionstest, klasse, uitbreiding van de functie van phpunit_framework_testcase {testitcanfindcorrectanswer () {% correctanserids = dollar - > getcorrectanswerids (); de dollar - > assertanswersarecorrectfor ($correctanserids);} privé functie getcorrectanswerids () {terug array_diff (bereik (min_answer_id, max_answer_id), [wrong_answer_id]);}}, dat we voor ons privé - methode overeenkomstig de bovenstaande redenering.Maar dat is niet genoeg.We hebben een probleem aan te pakken.Zullen we een privé - methode voor de waarden van de terugkeer van een variabele, maar in de volgende lijn met dezelfde variabelen.Dit is de enige variabelen worden gebruikt.In ons geval, de variabele is daar, omdat het voorziet in extra verduidelijking met betrekking tot de reeks nummers betekenen.Het heeft zijn nut en mogelijkheden.Maar nu we bijna dezelfde naam heeft dezelfde methode, het concept van een verandering van nut zijn.Dit is een niet - essentiële taken.,,,,, kunnen we gebruiken in variabele, de wederopbouw en de uitbanning van variabelen, een rechtstreeks beroep op de methode in plaats van gebruik te maken van variabelen in de volgende in de rij. Runnerfunctionstest, klasse, uitbreiding van de functie van phpunit_framework_testcase {testitcanfindcorrectanswer () {% Dit > assertanswersarecorrectfor ($- > getcorrectanswerids ()); getcorrectanswerids () {} private functie terug array_diff (bereik (min_answer_id, max_answer_id), [wrong_answer_id]);}}, en nu, wat Cool is, is slechts het begin van onze twee lijnen van de code is niet duidelijk, het Is verborgen door herhaalde en afhankelijk van de vervuiling.Na een paar stappen verandert, sluiten we de 2 de code, maar we breken de digitale identiteit van de afhankelijkheid.Dat is koud, of wat?Rennen, breken, we zijn klaar, runnerfunctions. Php?Als ik er een zie, als (). Dit betekent dat de logica.Als ik zie dat de logica, betekent dat een eenheid of het testen van nodig.We hebben een, als (), we, run (), do- (), terwijl de ring.Als we zijn voor de wederopbouw van de methoden voor de extractie van het instrument en het testen.,, maar welke code moet halen?Op het eerste gezicht, maar een voorwaarde lijkt een goed idee.Dit leidt tot de volgende code, de functie, het (de) {% notawinner; $spel = nieuwe spel (); $spel - > toevoeging van ("chet"); een spel - > toevoeging van ("Pat"); een spel - > toevoeging van (Sue "); {%. = de rand (0, 5) + 1; $spel - > delen ($dobbelstenen); $(dollar notawinner = getnotwinner spel);}, ($notawinner);} functie getnotwinner ($spel) {als (iscurrentanswercorrect ()) {% notawinner = $spel - > wascorrectlyanswered (); terug naar de notawinner;} of {% notawinner = $spel - > wronganswer (); de terugkeer van notawinner;}}, maar het ziet er goed uit, dit is slechts de keuze van de juiste de menu 's van de ide gegenereerd, er is Een probleem voor mij.Het doel is, het spel, met in, en methoden voor de winning van en in de ring.Wat is dit?De functie van het,, () {% notawinner; $spel = nieuwe spel (); $spel - > toevoeging van ("chet"); een spel - > toevoeging van ("Pat"); een spel - > toevoeging van (Sue "); {% dobbelstenen = rand (0, 5) + 1; notawinner = getnotwinner dollar (USD US - dollar spel, dobbelstenen);}, ($notawinner);} functie getnotwinner ($dollar gokken) {% spel - > delen ($dobbelstenen); als (iscurrentanswercorrect ()) {% notawinner = $spel - > wascorrectlyanswered () terug naar de notawinner dollar;} {% notawinner = dollar die het spel - > wronganswer (); de terugkeer van notawinner;}}, de oplossing om uit de ring, spelletjes, object.Echter, het de invoering van andere soorten problemen.We tellen de parameters te verhogen.Nu moeten we sturen, $dobbelstenen.Hoewel het aantal parameters, 2, is laag genoeg om geen aanleiding geeft tot bezorgdheid moeten wij ook rekening houden met deze parameter is het gebruik van de methode zelf.De dobbelstenen, $, maar worden gebruikt als (), de methode, die spelen.Ondertussen, in het spel, die () voor klasse, van groot belang is, het is niet een besluit dat als we winnen of niet.Bij de analyse van de code, spelletjes, kunnen we concluderen dat een winnaar van de staat kan zeggen is waar, wascorrectlyanswered ().Dit is vreemd, het heeft de aandacht gevestigd op een aantal ernstige problemen van de nomenclatuur, spelletjes, klas, we zullen in de komende cursussen, adres, op basis van de bovenstaande opmerkingen, is het misschien beter gaan en onze methoden voor de winning van de eerste versie van de functie van getnotwinner (.,,,...) {als (iscurrentanswercorrect ()) {% notawinner = $spel - > wascorrectlyanswered (); de terugkeer van notawinner} {%; anders notawinner = $spel - > wronganswer (); de terugkeer van notawinner;}}, kunnen we geloven dat we ide, door te kijken naar de code breken, kunnen we er zeker van zijn dat niet.Als je denkt dat het niet zeker, maar je gouden testen.Laten we nu tot de methoden voor het testen van dit goed op. En testitcantellifthereisnowinnerwhenacorrectanswerisprovided () {}, functie, en ik bedacht de naam is denk ik in de naam van de methoden voor het testen van de test.Dit is heel belangrijk, je moet wat testen, testen van hun gedrag, in plaats van wat ze zullen doen.Dit zal bijdragen aan een andere persoon of je zes maanden de tijd om dit kleine deel van de code moeten doen, maar we hebben een probleem.We moeten de methoden voor het testen van een object.We moeten die deze functie:,, testitcantellifthereisnowinnerwhenacorrectanswerisprovided () {% spel =??????????????????????Getnotwinner ($spel);}, moeten we een spel, dollar, het type, de spelletjes.Maar we doen de test in een eenheid, willen we geen gebruik maken van een echte, ingewikkeld en worden begrepen, spelletjes, klasse.Dat we een nieuw hoofdstuk in de test, zullen we het hebben over een andere les: spot, stoten, doen alsof.Deze zijn door het gebruik van andere materialen in een vooraf vastgestelde wijze alle technologie te creëren en het testen van voorwerpen.Wanneer het gebruik van een kader of zelfs phpunit zelf ingebouwde mogelijkheden zijn nuttig, omdat wij de huidige kennis over onze zeer eenvoudige tests, kunnen we doen veel mensen vergeten de,,, kunnen we tot een soort spel, in onze documenten en de definitie van het testen van de enige twee we zijn geïnteresseerd in een methode.Dit is heel simpel. Runnerfunctionstest uitbreiding, klasse, phpunit_framework_testcase (//...///////functie testitcantellifthereisnowinnerwhenacorrectanswerisprovided () {% spel = nieuwe fakegame (); getnotwinner ($spel) ///////.}.Fakegame {} /functie wascorrectlyanswered () {}) {}) de functie van wronganswer (,, die ons door de test, we zijn nog steeds in een milliseconde.Opgemerkt moet worden dat deze twee niet van goud van de test is de tijd: 43 milliseconden.,,, 3.00mb geheugen: goed, maar niet volledig, of gaan testen.Test: 5, 10, dat niet: 2, ook al moeten we op een andere manier om onze soort te noemen, omdat we niet de verklaring van dezelfde klasse, de code is zeer eenvoudig.We zijn alleen maar de belangstelling voor ons.De volgende stap is de praktische dingen terug en testen.Maar dit kan het moeilijker dan we hadden verwacht, omdat deze code:,, als (iscurrentanswercorrect ()), de methode, we bellen, iscurrentanswercorrect (), geen argumenten.Dit is niet goed voor ons.We het niet onder controle van de produktie.Het zal alleen maar leiden tot willekeurige nummers.We moeten voor de wederopbouw van onze code, een punt dat we kunnen blijven.We moeten de op grond van deze methode in het verkeer en het gebruik van de resultaten als parameter, getnotwinner ().Dit zal ons in staat stellen de controle van de resultaten van deze uitdrukking, als de verklaring, zodat de controle van de code vallen ons pad.We moeten onze eerste test in als en telefoon, wascorrectlyanswered (), de functie van het,,. () {///////...///////doen {% dobbelstenen = rand (0, 5) + 1; $spel - > delen ($dobbelstenen); notawinner = getnotwinner dollar (USD spel, iscurrentanswercorrect ());}, ($notawinner);} functie (spel getnotwinner dollar iscurrentanswercorrect) {als ($iscurrentanswercorrect) {ik notawinner = $spel - > wascorrectlyanswered (); de terugkeer van notawinner} {%; anders notawinner = $spel - > wronganswer (); de terugkeer van notawinner;}}, we hebben nu alle controle, afhankelijk van de gebroken.De duur van de test. De functie van,, testitcantellifthereisnowinnerwhenacorrectanswerisprovided () {% spel = nieuwe fakegame (); iscurrentanswercorrect dollar = waar; de dollar - > asserttrue (getnotwinner ($spel, iscurrentanswercorrect dollar);}, is dit een test, heel goed.Zijn we terug, echt, van onze methode, natuurlijk, functie, wascorrectlyanswered () {terug waar;}, moeten we de test, als (), ook andere wegen, functie, testitcantellifthereisnowinnerwhenawronganswerisprovided. () {% spel = nieuwe fakegame (); iscurrentanswercorrect dollar = vals. - $> assertfalse (getnotwinner (een dollar iscurrentanswercorrect));}, wij kiezen gewoon testen, deze keer niet, dus we maken een onderscheid tussen twee soorten gevallen gemakkelijker tussen fakegame {functie.,, wascorrectlyanswered () {terug waar; wronganswer () {} functie terug valse;}}, en ik fakegame, gewijzigd.,, de laatste schoonmaak, wederopbouw, winning, we hebben bijna geenHet spijt me dat ik zo lang de les, ik hoop dat je het leuk vindt, niet in slaap vallen.De laatste vóór het einde van de veranderingen, runnerfunctions.php, documenten en het testen van de functie van getnotwinner (.,,,., iscurrentanswercorrect dollar) {als ($iscurrentanswercorrect) {% notawinner = $spel - > wascorrectlyanswered (); de terugkeer van notawinner} {%; anders notawinner = $spel - > notawinner dollar terug wronganswer ();;}}, in onze aanpak van de taak is niet nodig, we moeten opruimen.We testen de eenheid zal deze wijziging is veilig.,, functie getnotwinner ($spel, iscurrentanswercorrect dollar) {als ($iscurrentanswercorrect) {terugkeer van $spel - > wascorrectlyanswered () {} anders terug naar het spel. - > wronganswer ();}}, dat we met dezelfde in variabele Wederopbouw en leiden tot het is verdwenen.De test is, zijn we nog steeds 100 milliseconden eenheid samen alle testen.Ik zei dat het heel goed is, en de wederopbouw van de test (opnieuw), ja, ja, we kunnen onze test is een beetje beter.Als we een paar rijen van de wederopbouw van de code, en we zijn heel eenvoudig.Het probleem is, in de volgende code, de functie, het testitcantellifthereisnowinnerwhenacorrectanswerisprovided () {% spel = nieuwe fakegame (); iscurrentanswercorrect dollar = waar; de dollar - > asserttrue (getnotwinner ($spel, iscurrentanswercorrect dollar);} de functie testitcantellifthereisnowinnerwhenawronganswerisprovided () {% spel = nieuwe fakegame (); iscurrentanswercorrect dollar = vals. De dollar - > assertfalse (getnotwinner ($spel, iscurrentanswercorrect dollar);}, we hebben herhaald, door een beroep te doen op de code, de nieuwe fakegame (), elke methode.Een van de methoden voor de extractie van de functie van de tijd, en testitcantellifthereisnowinnerwhenacorrectanswerisprovided. () {% spel = dollar - > afakegame (); iscurrentanswercorrect dollar = waar; de dollar - > asserttrue (getnotwinner ($spel, iscurrentanswercorrect dollar);} de functie testitcantellifthereisnowinnerwhenawronganswerisprovided () {% spel = dollar - > afakegame iscurrentanswercorrect (); dollar = vals; de dollar - > assertfalse (getnotwinner ($spel, iscurrentanswercorrect dollar);}, en nu, waardoor de dollar, speels, mooi niet.In de tijd voor de variabelen, functie, testitcantellifthereisnowinnerwhenacorrectanswerisprovided. () {% iscurrentanswercorrect = waar; de dollar - > asserttrue (getnotwinner ($- > afakegame (), iscurrentanswercorrect dollar);} werk kan testitcantellifthereisnowinnerwhenawronganswerisprovided () {% iscurrentanswercorrect = vals; de dollar - > assertfalse (getnotwinner ($- > afakegame (de) iscurrentanswercorrect dollar);},,, waardoor onze code korter maar in dezelfde tijd.Bij het lezen van een beweerd dat het lezen als een opstel.Wij aanvaarden dat, echt, als we niet met onze winnaar voor valse klasse van het juiste antwoord bieden.Ik vind het nog steeds niet is, is dat we met dezelfde variabelen zijn toegewezen, en, echt, of valse, volgens de test.Ik denk dat er meer manieren om dat te doen.,, functionele testitcantellifthereisnowinnerwhenacorrectanswerisprovided () {% dit > asserttrue (getnotwinner ($- > afakegame ($), - > acorrectanswer ())); de functie van testitcantellifthereisnowinnerwhenawronganswerisprovided (}) {% dit > assertfalse (getnotwinner ($- > afakegame ($), - > awronganswer ()));}, WOW!We testen een enkel pad, ze echt de uitdrukking van onze test.Alle details zijn verborgen in de privé - methode, aan het eind van de test.99% van de gevallen, hun uitvoering van het kan je niet schelen, als je dit doet, kan je de CTRL + klik in de naam van de methode, en Spring in de uitvoering van het,, terug naar de code. Als wij kijken naar onze cyclus, zien we dat er een variabele, dan kunnen we Het in een oogwenk kung FU uit de functie van het,,. () {% notawinner; $spel = nieuwe spel (); $spel - > toevoeging van ("chet"); een spel - > toevoeging van ("Pat"); een spel - > toevoeging van (Sue ") {% dobbelstenen = bestaat; (0, 5) + 1; $spel - > delen ($$notawinner = getnotwinne dobbelstenen);




Previous:
Next Page: