, gemakkelijk te testen met,,,,,,,,,, delen, deel 2,,,,,,, de delen van het netwerk, maandag wat in tuts + koers zal dalen tot slechts drie dollar.Niet' niet missen.,, het is een betreurenswaardig feit, maar in principe van de meting is heel eenvoudig, dit proces volledig in je dagelijkse werk moeilijker dan je zou willen.Alleen de verschillende terminologie kan bewijzen overweldigend zijn.Gelukkig is de verschillende instrumenten heeft je rug, helpen om dit proces zo eenvoudig.Het voorwerp van spot, premier simulatie kader, is een van deze instrumenten.In dit artikel zullen we grondig onderzoeken waarom het nuttig is, en hoe de test voor je werk - spot, en met een imitatie, onderzoek is alleen maar een beetje testen betreft, is het gedrag van de echte dingen.In simpele bewoordingen, meestal, als de test, als je niet wil uitvoeren van een specifieke aanpak.Integendeel, je moet er alleen voor zorgen dat het is, in feite, de zogenaamde, misschien een voorbeeld is in orde.Stel dat je een code voor de opname van gegevens in een dossier van de methode.Bij het testen van de logica was, natuurlijk wil je dat niet fysiek contact met het systeem.Dit kan je snelheid verminderen.In dergelijke gevallen is het beter die je systeem, en niet met de hand lezen van documenten, om te bewijzen dat het bijwerken, maar de methoden om ervoor te zorgen dat de toepassing in de klas, in feite, genaamd.Dit is belachelijk!Niets beter is dan dit model voor het lichaam, onthoud: terminologie is op lijn één.Laat nooit een chaotische blok termen om te voorkomen dat je een nieuwe vaardigheden leren, in het bijzonder als je volwassen ontwikkeling van gemeenschappelijke verantwoordelijkheid, met inbegrip van het beginsel en het gebruik van aan de afhankelijkheid van de injectie, een bekend met binnenkort nodig.,,, lachen en ': het hoge risico, zal je. Vaak horen lachen, alleen spreken, gooien.In feite, beide met een ander doel.Het eerste heeft betrekking op de definitie van de verwachte en ervoor te zorgen dat de verwachtingen van zijn gedrag.Met andere woorden, een simulatie kan leiden tot een mislukking van de test.Een kaartje, aan de andere kant, maar het is een virtuele gegevens kunnen worden doorgegeven aan het voldoen aan bepaalde normen, de werkelijke test bank, PHP, phpunit, heeft zijn eigen API voor het voorwerp van spot van het schip; echter, helaas, het is bewezen dat het werkt, ingewikkeld.Weet je, moeilijker te testen, is de kans groter, projectontwikkelaars alleen (helaas) niet, gelukkig, allerlei derde oplossing kan door de Packagist (componisten pakket), verbetering van de leesbaarheid, en, wat nog belangrijker is, kan schrijven.In deze oplossing het meest opmerkelijk is een kader vastgesteld om, gezien de simulatie object kader ontwerpen als alternatief voor de door de daling van de lange phpunit spot. Dat is een eenvoudige maar krachtige nut.Weet je zeker dat dat het is, in feite, moderne PHP normen.,, de installatie, de meest populaire instrumenten, zoals de PHP cynisme kunnen installeren en componist,.,, favoriete PHP instrument, een van deze dagen, is de aanbevolen benadering door de installatie van een componist (hoewel het door de peren?).,, wacht, dat is de componist is?Dit is de afhankelijkheid van de Gemeenschap van de eerste PHP beheer van instrumenten.Het is een makkelijke manier om de afhankelijkheid van de verklaring van een project, en ze in een enkele beschikking uit te voeren.Als een moderne PHP ontwikkelaars, heb je een basiskennis van de componist is wat belangrijk is, en hoe het wordt gebruikt. Indien het werk, en voor het leren, de toevoeging van een nieuwe, composer.json, documenten naar een lege projecten en aanvullende: {"die nodig zijn voor de ontwikkeling van": {"spot /spot": "is voor de" ontwikkeling "meester"}}, dat kleine beetje hola aangewezen, de ontwikkeling, de aanvraag moet in de bibliotheek.De installatie van het commando, componist - ontwikkeling, zal in het pakket, de ontwikkeling van de installatie, de componist - installatie afhankelijk van de dollar componist bibliotheek informatie (met inbegrip van het pakket moet de ontwikkeling van) - installatie van bespotten, bespotten (Dev de belangrijkste 5a71299) 5a712994e1e3ee604b0d355d1af342172c6f475f geschreven documenten in de vorm van klonen op last van het dossier, als een extra stimulans, de componist van schepen de automatische machine vrij!De aanwijzing van een ClassMap catalogus en laden, componisten, of psr-0 zelf, overeenkomstig de normen en de aanpassing van de structuur voor de afstemming van uw gids.Een Nettuts+ meer leren.Als je nog steeds handmatig in elk PHP documenten moeten de talloze documenten, goed, je hebt het waarschijnlijk fout. De situatie kan worden bereikt, en dat een oplossing voor de kwestie van de herziening van de eerste, de beste is.Stel je voor, dat je nodig hebt om een systeem voor de verwerking van de inhoud van het proces, die de dossiers, en schrijf het op.Misschien de presentatie van gegevens, of van de lokale bestanden ', of de webdiensten, en gegevens in het systeem, als het beginsel van de verantwoordelijkheid van elk aan één enkele categorie, namelijk verantwoordelijk moet zijn voor wat een ding, dan moeten wij deze logica die twee categorieën: een noodzakelijk de inhoud, en een ander lichaam. Het schrijven van gegevens op een dossier.Generatoren, en, de documenten, de categorieën, moet het lukken.,,,, waarom gebruik je niet, dat file_put_contents, rechtstreeks van de generator, klas?Oké, stel jezelf de vraag: "Hoe kan ik dit testen?"Technologie, zoals de aap patch, het kan je overbelast dit soort dingen, maar, als een beste praktijk, is het beter om deze functie van deze functies, zodat het gemakkelijk kan worden gemaakt van de instrumenten, zoals de spot.Hier is een van de fundamentele structuur (met een gezonde dosis pseudo - code) voor ons, de generator, klasse.PHP /src /generator.php generatoren (bescherming van de documenten; de functie van __construct (dossier) {% dit > FILE = documenten;} beschermende functie () {///////getcontent presentaties terug "foo BAR"; openbare functie () {}) $inhoud = dollar - > getcontent (); de dollar - > het dossier > ('foo. "Inhoud;}} dollar), de afhankelijkheid van de injectie, de code met behulp van de zogenaamde afhankelijkheid van de injectie.Nogmaals, dit is een simpele de ontwikkelaar van de terminologie, de methode voor de berekening van de door het harde code, in plaats van, in een soort afhankelijk zijn, waarom is dit goed?Want, anders zullen we geen simulatie, documenten, klasse.Natuurlijk, we kunnen lachen, documenten, maar als het op de concretisering van de code is hard, we testen, er is geen makkelijke manier om met de vervanging van het voorbeeld van versie van lachen. En de functie van __construct () {///////- - - $> documenten voor Het nieuwe document;}, gebouwd kan worden gebruikt voor het testen van de procedure is de beste manier om de problemen te behandelen en, voor elke nieuwe methode ", hoe ik de test?"Hoewel er vaardigheden te verkrijgen omtrent deze codering hard, zo wordt algemeen beschouwd als een slechte praktijken.Integendeel, altijd in de klas, de afhankelijkheid van de door de fabrikant, of door middel van een setter injectie injectie, is min of meer hetzelfde, de constructeurs geïnjecteerd.Het beginsel is precies hetzelfde; het enige verschil is, dat de afhankelijkheid van de injectie, door de fabrikant van de methode, maar ze door een methode, zoals: de functie setfile (dossier) {% dit > FILE = documenten;}, een afhankelijkheid van de injectie vaak kritiek is en dat de invoering van De complexiteit van de toepassing van een aanvullende, meer kan worden gemeten.Hoewel de complexiteit van de auteur zei dat de moeite waard is, als je wilt, kan je dat de afhankelijkheid van de injectie, waarin ook de transparantie van wanbetaling.Dit is een voorbeeld van de openbare functie:, generatoren (__construct (dossier = nul) {% dit > FILE = dossier?De nieuwe documenten;}, nu, als een voorbeeld, documenten, worden doorgegeven aan de fabrikant in de categorie, het doel in gebruik.Aan de andere kant, als er door de,, generatoren, zullen dalen, de manuele concretisering van toepassing.Dat maakt deze verandering in de categorie documenten, #: concretisering van de nieuwe generator;in de documenten nieuwe generator (nieuwe documenten);in het testen van nieuwe generator van simulatie - dossier ($mockedfile);, blijven in deze handleiding, het doel, de documenten, die niets anders dan een eenvoudige PHP, De verpakking file_put_contents, de functie, het <?PHP /src /file.php document {/* * * * * * * schriftelijke gegevens aan een bepaald dossier * * * * * * * * * * * * * * * de inhoud van een touw weg @ @ @ @ @ @ @ * * * * * * * * * * * * * * /openbare functie om de terugkeer van gemengde ($pad, $inhoud) {terug file_put_contents ($pad, $inhoud);}}, heel simpel, hè?We schrijven een test om te zien wat het probleem is, de eerste hand.PHP /test /generatortest.php klasse generatortest uitbreiding phpunit_framework_testcase {openbare functie testitworks () {% dossiers voor nieuwe documenten; die generator = nieuwe generator (documenten); - de generator > brand (});}, let op, deze voorbeelden als noodzakelijk werden er automatisch laden en de componist.Je composer.json, selectief te aanvaarden van een document, het laden, het voorwerp, kan je een catalogus of te laden.Niet meer nodig, verwarring, verslag!Als werk, werking, en phpunit, komt terug, goed (een test van een bewering, 0), het is groen, en dat betekent dat we in de volgende missie, hè?Nou, niet helemaal.Hoewel het waar is dat de code van de rol, in feite, werk, elke test, een, documenten foo.txt, documenten worden in een systeem gecreëerd.Als je schrijft tientallen testen?Kan je je voorstellen, snel, de snelheid van de uitvoering van de test stottert.,, hoewel de test die ten onrechte aan het systeem.,, of niet?Als je de test niet van invloed zijn op de vermindering van de snelheid, en rekening te houden met het gezond verstand.Denk er eens over na. We testen, generator, klasse, waarom wij er belang bij de uitvoering van de code van het dossier, klasse,???????Het heeft zijn test.Waarom moeten we verdubbelen?Deze oplossing, en ik hoop dat voor een deel, een perfecte illustratie, waarom lachen van essentieel belang is.Zoals eerder vermeld, hoewel we gebruik kunnen maken van phpunit primaire API - als we lachen om de eisen werk niet leuk.Een manier om dit aan te tonen, hier is een voorbeeld van een voorwerp van spot moeten instemmen met een volledig gekwalificeerde, en voor openbare functie terug, John, testnativemocks () {% simulatie = dollar - > getmock ('someclass "); $simulatie > verwacht dat de ($- >. ()) - > methoden ('getname") - > (dollar - > (John doe ");}, en het werk van de bewering van volledig gekwalificeerde, methode, op een keer terug, John - phpunit uitvoering is chaos en lang.We kunnen lachen, verbetering van de leesbaarheid van openbare functies, testmockery () {% simulatie = spot, spot ('someclass:'); $simulatie > moeten worden aanvaard ('getname ") - >. () - > en (John doe");}, dat zijn voorbeelden van deze (en dat moet lezen) beter, blijven. Als een voorbeeld van de vorige "situatie, dit keer in, generatortest, klasse, maar laten we de simulatie of analoge gedrag, documenten van de spot.Dit is de laatste code:PHP generatortest uitbreiding van openbare functies phpunit_framework_testcase {teardown () {}); ironisch:: (openbare functie testitworks () {% mockedfile = spot, spot (documenten); mockedfile dollar - > moeten ('") - > en ('foo." en "foo BAR") - >. (de) USD = nieuwe generatoren en elektrische generatoren (dollar mockedfile); - de generator > brand ();}}, door de war, spot,:: (referentie), in de demontage, methode?Het schoonmaken van de test door de huidige statische bel met een aanfluiting van de containers en de uitvoering van een taak, die nodig zijn voor de controle van je verwacht.,, een categorie kunnen worden om de leesbaarheid, ironisch:: (), spot.Dan moet je meestal in de simulatie van de aangewezen methode betreft, wil je bekend voor, en met alle toepasselijke parameters.Dit kan door middel van moet worden aanvaard (methoden), en (ARG), methoden, in dit geval, we bellen, voor het genereren van - > brand (), zijn wij van mening dat het moet noemen, in het voorbeeld, documenten, en het pad, foo. En, en, gegevens, foo BAR. ////////generator.php bibliotheken, openbare functie) () {$inhoud = dollar - > getcontent (); de dollar - > documenten > ('foo. ", inhoud);}, omdat wij het gebruik van de afhankelijkheid van de injectie, Maar het zal lachen, UEN nu, de omvang van het voorwerp van de generator, $= nieuwe generator ($mockedfile); en als we de test een keer, ze zal terug de groene, maar de bestanden, het systeem niet aangeraakt!Nogmaals, geen documenten, de nodige contacten.Het heeft zijn test.Lachen om de overwinning.De simulatie, eenvoudig object, die het voorwerp van een klasse - niet altijd.Als je alleen maar een simpele objecten, misschien voor een gebruiker, je zou door een reeks, simulatie, de sleutel en elk product overeenkomt met de waarde van de naam van de methode en de terugkeer van de functie van, respectievelijk, testsimplemocks () {% gebruikers = spot, spot (['getfullname "= >" Jeffrey "]); $gebruikers > getfullname (); ///////Jeffrey}, de terugkeer van de waarde van de spot, spot zou hebben, als de methode moet een waarde.Blijven we de generator /dossier, bijvoorbeeld als we ervoor moeten zorgen dat, als het dossier is er niet, het moet worden herschreven?Hoe we dit kunnen bereiken?De sleutel is het gebruik van de methode, andreturn (), in je lachen tegen het model, met de Verenigde Staten.Dit is een van de voorbeelden van openbare functies: bijwerking, testdoesnotoverwritefile () {% mockedfile = spot, spot (documenten); mockedfile dollar - > moeten worden aanvaard ('exists ") - >. () - > en (echt); $mockedfile - > moeten ('") - > er is $() = nieuwe generatoren en elektrische generatoren (dollar mockedfile); - de generator > brand (}); deze actualisering van de code, en dat er nu, moeten de methoden aan het lachen, documenten, een categorie, moet de test voor de weg terug, De doelstelling, het blijkt dat de documenten, echt, al bestaat, kunnen worden gedekt.Onze volgende stap om ervoor te zorgen dat, in dit geval, heeft, in, documenten, is nooit geactiveerd.Lachen, het is makkelijk, bedankt, nooit (), verwachtingen, mockedfile dollar - > moeten ('") - > nooit ();, moeten we nog een test doen, zou een fout, methode: bestaat uit het dossier () moet worden beschouwd als de echte 1 keer geraakt, maar 0 keer de telefoon. Aha, dus de test verwacht dat de dollar - > documenten > bestaat (), moeten bellen, maar dat is nooit gebeurd.Dus, het is mislukt.Laten we het op te lossen.En hetPHP een generator (bescherming van de documenten; de functie van __construct (dossier) {% dit > FILE = documenten;} beschermende functie () {///////getcontent presentaties terug "foo BAR"; openbare functie () {}) $inhoud = dollar - > getcontent (); de file = "- als."; (!De dollar - > documenten > bestaan (documenten)) {% dit > document > (die de inhoud van de documenten;}}} dollar), dat is alles.We volgen niet alleen tdd (tdd) van de cyclus, maar de tests terug naar Green.Het is belangrijk om te onthouden, deze test effectief is, als je dat doet, in feite, testen en de afhankelijkheid van de klasse van je.Anders, hoewel de test kan aantonen dat voor de productie van groene, de code breken.Onze presentatie, die veel hebben om ervoor te zorgen dat de generator, werk, zoals verwacht.Vergeet niet te testen, documenten en!,,, verwachtingen, laten we dieper graven, zal de verklaring meer verwacht.Ben je bekend met de,,.Maar we moeten voorzichtig zijn, haar naam is een beetje misleidend.Bij het verlaten van haar, is het niet nodig de methode worden veroorzaakt; de standaard is nul keer (en) zeroormoretimes (,).Dat moet je een keer de methode wordt genoemd, of misschien een keer, een paar opties: voor analoge > moeten worden aanvaard (de) - > c); en (analoge > moeten worden aanvaard (de) - > (1); $simulatie - > moeten worden aanvaard (prestaties van de) - > ten minste () - > (1); soms is er extra beperkingen noodzakelijk zijn.Zoals reeds aangetoond, als specifieke methoden worden geactiveerd wanneer het nodig is om ervoor te zorgen dat het bijzonder nuttig zou kunnen zijn.Onthoud, dat slechts één methode roept deze exacte parameters is belangrijk, hier zijn een paar voorbeelden voor de simulatie > moeten worden aanvaard ("') - > withanyargs () - > c); voor de simulatie van de standaard (///////> moeten ("') - > en'foo. ") - > c); en (analoge > moeten (") - > en ('foo. "En" foo BAR ") - > c); het (verder kan worden uitgebreid tot het toestaan van de waarden van De parameters is in wezen een dynamische, mits aan bepaalde criteria voldoet.Misschien kunnen we alleen maar hopen om ervoor te zorgen dat een touwtje aan een methode voor de simulatie > moeten worden aanvaard ("') - > en (ironisch:: - ('String')) - > c); (, of misschien een debat moeten overeenkomen met de gewone uitdrukking.We denken dat, aan het einde van een naam, en mockedfile moet overeenkomen met de dollar - >, moeten (") - > en (" /,. $/", ironisch:: een ()) - >. ();, en als laatste, maar niet beperkt Tot, het voorbeeld dat), we overwegen een aantal aanvaardbare waarden, het gebruik en de exploitatie, met mockedfile dollar - > moeten worden aanvaard (") - > en (ironisch::: ('log. "," geld. ") - >. ();, met deze Code, dat alleen van toepassing is als het eerste argument, en de methode is, of zijn logboek. Txt. Txt.Anders, zullen leiden tot een abnormale, test, met uitzondering \\ \\ nomatchingexpectationexception geen match gevonden: procedures voor de behandeling van...,,,,, vergeet niet, je kan altijd een alias, spot, ik, in je klas doen beknopter, gebruik dan: m;,.Dit kan een beknopt, ik spot ():,,, tot slot, we hebben meerdere opties aangegeven wat voor terug te moeten.Misschien hebben we het nodig om terug te keren naar een booleaanse.Gemakkelijk, simulatie: $> moeten worden aanvaard (de) - >. () - > weer een (pseudo);,, lachen, misschien vind je, soms moet je je gewoon als een gemeenschappelijke methode, in plaats van het object.Laten we ons eens voorstellen, met het oog op de doelstelling van dit voorbeeld, in je verwijzen naar een gewoonte van de functie (piepende ademhaling) van een profiel krijgt een waarde en het;PHP getOption klasse (openbare functies ($) {terugkeer configuratie ($"); de openbare functie () {}), time - out = dollar - > getOption ('timeout"); ///////-}} dollar doen, hoewel er een aantal verschillende technische imitatie van de functie.Maar het is beter om te voorkomen dat deze methode nog steeds samen.Dit is spot om als onderdeel van de rol van de openbare taken testpartialmockexample () {% simulatie = spot, spot ('myclass:[getOption] "); $simulatie > moeten worden aanvaard ('getoption") - >. () - > en (10); $simulatie > brand (}), aandacht. We tussen haakjes de simulatie.Als je er meer dan één methode alleen gescheiden door een komma, zoals dit:, spot spot, spot = $('myclass [1] "; 2). Het gebruik van deze technologie in de methode van voorwerpen, de rest van de trekker, uitgedrukt als ze meestal.Onthoud, je moet altijd een verklaring van je gedrag, je spot van de methode, zoals wij dat doen.In dit geval, wanneer de getOption, bekend als, in plaats van uitvoering van de code, we gewoon terug, 10.000,, een andere mogelijkheid is het gebruik van passieve deel kan lachen, dat als model voor de standaard - status: alle in overeenstemming met de moedermaatschappij, tenzij dat is aangewezen, in het bijzijn van de Code kan worden herschreven: openbare functie, testpassivemockexample () {% simulatie = spot, spot ('myclass:') - > makepartial (); $simulatie > moeten worden aanvaard ('getoption ") - >. () - > en (10); $simulatie - >) ();}, in dit geval alle methoden, myclass, zich zal gedragen als ze meestal, met uitzondering van getOption,, dit is lachen en terug te keren naar 10.000% quot% hamcrest.,,,De hamcrest, aan de basis van een extra instellingen dezelfde definitie verwachtingen.,, als je bekend bent met een aanfluiting van de API, het voorstel voor u ook gebruik maken van hamcrest bibliotheek, die voorziet in een definitie van de verwachtingen van de leesbaarheid van aanvullende overeen.Als spot, die kunnen worden gemonteerd in de componist, moet de "ontwikkeling": {"spot /spot": "is voor de" ontwikkeling "," "davedevelopment /hamcrest PHP": "is voor de" ontwikkeling "meester"), als de installatie, kun je een beter leesbare symbolen om je te testen.Dit is een voorbeeld van de wijzigingen, met inbegrip van lichte tot dezelfde resultaten.PHP hamcresttest uitbreiding van openbare functies phpunit_framework_testcase {testhamcrestmatchers () {. = "Jeffrey"; leeftijd = 28 dollar. Hobby 's: ['coding "," gitaar "," schaak]; is van mening dat de (dollar heet ('jeffrey ")); is van mening dat de naam (dollar is niet Joe" ("())); is van mening dat (de dollar - tijdperk is (meer dan (20))); stelt (% ouder dan (20) ($); is van mening dat het tijdperk van (integervalue ()), is een (nieuw); rijk is (aninstanceof ('foo"))); is van mening dat de (dollar hobby' s, (arrayvalue () ()); is van mening dat de dollar hobby 's, arrayvalue ()); is van mening dat de (dollar hobby' s, husky ('coding ");}}, dat hamcrest kun je schrijven Je advocaat in de leesbaarheid en beknopte wijze yJe lust.(de), het gebruik, de functie is niets meer dan een taal de suiker helpt de leesbaarheid, vind je het goed hamcrest een mengsel.Voor de aanleg, met Mockery alleen te bevatten, dat a mocked moet worden gebruikt met een enkel argument van type, touw, en je zou geworden, $mock-> shouldReceive ('method') -> met (Mockery:: type (knoop)). (); ->, als met Hamcrest, Mockery: type, kunnen zijn: (de) stringValue vervangen met,,, als $mock-> Walters, shouldReceive ('method'); -> met (stringValue () (); -> c), Hamcrest volgt de waarde, van een verdrag voor naming, die de aard van de A.,,,,, integerValue nullValue,,,,,, arrayValue spoelen. En herhaal,,, Alternatively, met een argument om, Mockery:: een () (), kan worden, iets $file->,., shouldReceive ('put') -> met ('foo.txt', iets -> () (); c); de,,,, de grootste hurdle.Belachelijk, ironisch genoeg, niet de API zelf, met een aanfluiting., het grootste obstakel is, ironisch genoeg, niet de API - en zelf, maar waarom, als je in de test met de simulatie, de sleutel is om te leren en je code van de verantwoordelijkheid van de workflow van beginselen.Door de BOB Martin, een soort "SrP blijkt, moet er een, en er is maar één reden om dat te veranderen, met andere woorden, een soort moet in meer dan één bijwerking, uw aanvraag geen veranderingen, zoals de wijziging van de logica, of is de produktie in de vorm van gegevens, of hoe kan houden.In de meest eenvoudige vorm, als een methode, een soort moet één ding doen,,, documenten, het beheer van het systeem van elkaar.Een duurzame, MySQLdb, opslag van gegevens.Een e - mail, klasse, voor te bereiden en de e - mails.Let op, in deze gevallen zonder een woord, en het gebruik van het begrip,, zodra deze is veel gemakkelijker, test.Gebruik moeten maken van alle activiteiten, niet behoort tot de klasse van de paraplu, paraplu.Als een soort test, gericht op een soort, is uitgevoerd en alle verslavingen.Ben je niet geïnteresseerd in ze testen, ze hebben hun eigen test.Hoewel je niet gestopt, met de verwezenlijking van de phpunit spot, waarom zou hij alleen als verbetering van de leesbaarheid van een bijgewerkt, de componist?,
Om te testen
Next Page:De oprichting van een timer controle