window.pipedriveLeadboosterConfig = { base: leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on juba olemas') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() BDD ON RAILS - The Codest
The Codest
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Tööstusharud
    • Fintech & pangandus
    • E-commerce
    • Adtech
    • Healthtech
    • Tootmine
    • Logistika
    • Autotööstus
    • IOT
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
Tagasi nool TAGASI
2016-08-19
Tarkvaraarendus

BDD ON RAILS

Michal Krezelewski

Tänapäeva programmeerijad kasutavad oma igapäevatöös üha enam agiilset praktikat. Isegi standardset tarkvaraarenduse elutsüklit järgivad projektid võivad nende kohandamisest kasu saada. Automaatne testimine ja TDD tõid meie töösse rohkem kindlustunnet, hõlbustasid olemasolevate funktsioonide muudatuste rakendamist ja viisid meid sageli parema koodidisaini juurde. Kuid nüüd ei piisa sellest. Me peame testidest saadava kasu piirini välja ajama ja BDD võimaldab seda. BDD tugineb TDD-le ja lisab selle tavadele palju väärtust. See toob projektile igakülgse keele, võimaldab paremat suhtlust kliendi ja arendajate vahel. See pakub palju projektijuhtidele ja -juhtidele, kuid teeb ka arendaja elu palju lihtsamaks. BDD põhimõtete järgimine annab meile selged nõuded, testid on kergemini mõistetavad ja need võivad olla dokumentatsiooniks. BDD nihutab testimise teemade fookust ja annab meile kindlustunde, et me testime seda, mida peaksime testima - käitumist.

Kui kasutate TDD-d, on BDD-ga alustamine lihtne - see on põhimõtteliselt selle parimate tavade kogum. BDD-l on hulk lihtsaid reegleid, mis ütlevad, kuidas kirjutada spetsifikatsioone ja mida testida. Spetsifikatsioonid on jagatud kolmeks osaks: Given (testitingimuste seadmine), When (tegevuse kutsumine subjektile) ja Then (väited). Testidel peaksid olema kirjeldavad nimed ja olemasolevad testimisraamistikud võimaldavad kasutada meetodeid ja väiteid, mis sarnanevad loomulikule keelele - kõik see kokku annab meile testid, mis on loetavad nii tehnilistele kui ka mitte-tehnilistele kasutajatele. Head nimetamiskonventsioonid osutuvad kasulikuks regressioonitestide ajal.

BDD sisaldab ka suuniseid testitavate isikute jaoks. Erinevalt TDD-st nihutab see fookuse rakendamise testimisest käitumise testimisele - ja selle kasutamine viib parema disaini ja annab suurema paindlikkuse, kui tuleb teha muudatusi. Spetsifikaadid peaksid olema nagu kirjalikud ja täidetavad kliendi nõuded - kõrgtasemelised peaksid toimima vastuvõtutestidena. Eesmärk on kirjutada testid nii, et neid oleks vaja muuta ainult siis, kui nõuded muutuvad. BDD kasutamine annab meile kindluse, et me testime seda, mida tegelikult vaja katta, ja see on pragmaatilisem lähenemine kui TDD.

Kui soovite näha BDD-d praktikas, siis soovitame Ruby't. See on võimas ja lõbus keel ning sellel on suurepärane BDD tööriistakomplekt.

Kurgi

Cucumber on kõige populaarsem raamistik BDD jaoks Ruby's. See tutvustab spetsiaalset keelt nimega Gherkin, milles te kirjutate oma testid. Erinevalt RSpecist on Gherkinis kirjeldatud funktsioonid tavaline tekst, mitte koodning sellisena võib ja peaks seda mõistma igaüks, eelkõige klient.

Cucumberi funktsioon näeb välja selline (näide võetud Cucumberi wikist):

 Funktsioon: Mõni lühike, kuid kirjeldav tekst selle kohta, mida soovitakse.
    Selle funktsiooni ärilise väärtuse tekstiline kirjeldus.
    Ärieeskirjad, mis reguleerivad funktsiooni ulatust
    Mis tahes lisateave, mis muudab funktsiooni arusaadavamaks.

  Stsenaarium: Mingi määratletav ärisituatsioon
    Arvestades mõnda eeltingimust
    Ja mõni muu eeltingimus
    Kui toimija mingi tegevus
    Ja mingi muu tegevus
    Ja veel üks tegevus
    Siis saavutatakse mingi kontrollitav tulemus
    Ja juhtub ka midagi muud, mida me saame kontrollida

  Stsenaarium: Teistsugune olukord
    ...

Funktsioone kirjeldatakse üksikasjalikult hiljem.

Kurgi kasutamine Ruby on Railss

Paigaldamine

Esimene samm, et kasutada kurki oma projekt on selle paigaldamine. Lihtsalt lisage need kaks pärlit oma Gemfile'i:

rühm :test do
  gem 'cucumber-rails', :require => false
  gem 'database_cleaner'
end

Koondage need, käivitades komplekti paigaldaminening genereeri Cucumberi skriptid ja kataloogid järgmise käsuga:

rails generate cucumber:install

See loob config/cucumber.yml, script/cucumber ja funktsioonid/ kataloog, mis sisaldab .feature failid, samuti sammude määratlused ja toetavad failid. Funktsioonide käivitamiseks kasutage uut rake käsku:

kurgi harali

Omadused

Vaatame lähemalt funktsioone. Funktsioon on midagi, mis teie rakendusel on või mida see teeb - näiteks saadab perioodiliselt uudiskirju või võimaldab kasutajal oma fotosid avalikult jagada. Üks funktsioon koosneb mitmest stsenaariumist, mis kirjeldab, kuidas see funktsioon erinevates kontekstides töötab.

Cucumber'i põhilise kasutamise demonstreerimiseks Railsis kirjutame funktsiooni nullist. See näitefunktsioon on esimene, mille kirjutame rakenduses, mida näidatakse selle artikli tulevas teises osas. See rakendus võimaldab kasutajal luua esemeid ja kauplusi (kauplused müüvad esemeid) ning seejärel luua ostunimekirju.

Kõige lihtsamas versioonis näitab rakendus pärast ostunimekirja koostamist, millistes kauplustes on kasutaja soovitud kaubad kõige odavamad.

Kõigepealt looge uus fail nimega create_item.feature aastal funktsioonid/ kataloogi. Üleval on .feature faili on olemas Funktsioon märksõna, millele järgneb selle lühikirjeldus. Näiteks:

Funktsioon: Esemete loomine

Järgnevatel ridadel saate kirjutada ärieesmärgi, mis rakendab seda funktsiooni. Kuna Cucumber ignoreerib enne esimest Scenario't kirjutatud teksti, ei ole vaja midagi kirjutada, kuid see on kindlasti hea mõte.

   Selleks, et hõlpsasti luua ostunimekirju lähedalasuvates kauplustes müüdavate kaupadega.
   Kasutajana
   Soovin lisada süsteemi kaupu

Väljalõikes näete eespool üsna populaarset mustrit, millega saab kirjeldada ärieesmärke. See koosneb kolmest osast: miks on funktsioon vajalik, kes seda tahab ja mis see on. Loomulikult ei pea te seda formaati järgima, kuid lisage kindlasti oma kirjeldusse vastused nendele kolmele küsimusele.

Stsenaariumid

Seejärel kirjutame mõned stsenaariumid. Iga stsenaarium algab märksõnaga "Scenario" ja sisaldab mitu sammu.

    Stsenaarium: unikaalse eseme loomine
      Arvestades, et on olemas kirje "Milk".
      Kui ma lähen pealehele
      Ja ma loen kirje "Leib"
      Siis näen "Leiba" esemete nimekirjas. 

Seega, kui keegi on loonud elemendi nimega Piim, siis on võimalik luua Leib ja selle tulemusel ilmub Leib elemendi loendisse. Me ei peaks testima andmebaasi kirje loomist, kuna sellel faktil ei ole kliendi jaoks tegelikku väärtust.

Stsenaariumi sammud kasutavad kolme peamist märksõna:

  • Antud, et anda stsenaariumile konteksti
  • Kui, tegevuste kirjeldamiseks
  • Siis, tulemuste kirjeldamiseks

Oluline on märkida, et Cucumber ignoreerib märksõna sammu, millega ta alustab, ja vastab ainult hilisemale osale. Seega võite oma samme alustada sõnaga "And", kus iganes see tundub loomulik. Ainus reegel õige võtmesõna valimiseks on, et Stsenaarium peab olema kergesti arusaadav.

Etappide määratlused

Cucumber'i käivitamine annab nüüd järgmise tulemuse:

[...]
Funktsioon: Esemete loomine
  Selleks, et hõlpsasti luua ostunimekirju lähedalasuvates kauplustes müüdavate esemetega
  Kasutajana
  Soovin lisada süsteemi esemeid

  Stsenaarium: unikaalse eseme loomine # features/create_item.feature:6
    Antud on "Milk" Item # features/create_item.feature:7
      Määratlemata samm: "on olemas kirje "Milk" Item" (Cucumber::Undefined)
[...]

Seda seetõttu, et Cucumber ei tea, mida me mõtleme, kui me ütleme "on olemas Milk Item". Et lisada oma sammudele mingi tähendus, tuleb need defineerida dokumendis step_definitions kataloogi.

Soovitatav viis oma sammude määratluste korrastamiseks on jagada need domeeni järgi. Näiteks enamik meie loodud sammudest kuulub Item-domeeni. Seega peaksime looma faili nimega step_definitions/item_steps.rb ja paigutage sinna järgmine kood:

Arvestades "on olemas "$name" Item" do |nimi|
  Fabricate :item, name: name
end

Kui "ma loome "$name" eseme" do |nimi|
  jooksul "#new_item" do
    fill_in "nimi", koos: nimi
    click_on "Create"
  end
end

Then "Ma näen "$name" objektide nimekirjas" do |name|
  within ".items" do
    expect(page).to have_content name
  end
end

Sammude määratlused põhinevad tavaliselt Capybaral. Kui te ei ole Capybaraga tuttav, vaadake kindlasti käesoleva artikli lõpus olevaid linke.

On veel üks samm, mis vajab määratlemist ja see ei mahu tegelikult punktide hulka. Selle võiks panna sisse main_page_steps.rb:

Kui "ma lähen pealehele" ei
  külastada root_path
end

Kokkuvõte

See on väga lihtne lugu väga lihtsa funktsiooni jaoks. Selle eesmärk oli demonstreerida BDD põhimõisteid, nagu neid kasutatakse Cucumberis. Heade lugude kirjutamine nõuab siiski veidi rohkem. Arendajana peate oma mõtteviisi täielikult muutma - unustage rakendamine ja keskenduge selle asemel ärieesmärkidele. Cucumber teeb selle ülemineku lihtsamaks oma nutika lihtkirjalugude kasutamise abil.

Allikad, inspiratsioonid ja huvitav lugemine:

  • https://github.com/cucumber/cucumber/wiki/Cucumber-Backgrounder
  • https://github.com/jnicklas/capybara
  • https://blog.engineyard.com/2009/15-expert-tips-for-using-cucumber
  • http://blog.codeship.com/cucumber-best-practices/
  • http://www.elabs.se/blog/15-you-re-cuking-it-wrong
  • https://github.com/strongqa/howitzer/wiki/Cucumber-Best-Practices

Seotud artiklid

Tarkvaraarendus

Tulevikukindlate veebirakenduste loomine: The Codest ekspertide meeskonna ülevaade

Avastage, kuidas The Codest paistab skaleeritavate, interaktiivsete veebirakenduste loomisel silma tipptehnoloogiatega, mis pakuvad sujuvat kasutajakogemust kõigil platvormidel. Saate teada, kuidas meie eksperditeadmised aitavad kaasa digitaalsele ümberkujundamisele ja äritegevusele...

THECODEST
Tarkvaraarendus

Top 10 Lätis asuvat tarkvaraarendusettevõtet

Tutvu Läti parimate tarkvaraarendusettevõtete ja nende innovaatiliste lahendustega meie viimases artiklis. Avastage, kuidas need tehnoloogiajuhid saavad aidata teie äri edendada.

thecodest
Enterprise & Scaleups lahendused

Java tarkvaraarenduse põhitõed: A Guide to Outsourcing Successfully

Tutvuge selle olulise juhendiga, kuidas edukalt outsourcing Java tarkvara arendada, et suurendada tõhusust, pääseda ligi eksperditeadmistele ja edendada projekti edu The Codest abil.

thecodest
Tarkvaraarendus

Ülim juhend Poola allhanke kohta

outsourcing kasv Poolas on tingitud majanduslikust, hariduslikust ja tehnoloogilisest arengust, mis soodustab IT kasvu ja ettevõtlussõbralikku kliimat.

TheCodest
Enterprise & Scaleups lahendused

Täielik juhend IT-auditi vahendite ja tehnikate kohta

IT-auditid tagavad turvalised, tõhusad ja nõuetele vastavad süsteemid. Lisateavet nende tähtsuse kohta leiate kogu artiklist.

The Codest
Jakub Jakubowicz CTO & kaasasutajad

Tellige meie teadmistebaas ja jääge kursis IT-sektori eksperditeadmistega.

    Meie kohta

    The Codest - rahvusvaheline tarkvaraarendusettevõte, mille tehnoloogiakeskused asuvad Poolas.

    Ühendkuningriik - peakorter

    • Büroo 303B, 182-184 High Street North E6 2JA
      London, Inglismaa

    Poola - kohalikud tehnoloogiakeskused

    • Fabryczna büroopark, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varssavi, Poola

      The Codest

    • Kodu
    • Meie kohta
    • Teenused
    • Case Studies
    • Tea kuidas
    • Karjäärivõimalused
    • Sõnastik

      Teenused

    • See nõuandev
    • Tarkvaraarendus
    • Backend arendus
    • Frontend arendus
    • Staff Augmentation
    • Backend arendajad
    • Pilveinsenerid
    • Andmeinsenerid
    • Muud
    • QA insenerid

      Ressursid

    • Faktid ja müüdid koostööst välise tarkvaraarenduspartneriga
    • USAst Euroopasse: Miks otsustavad Ameerika idufirmad Euroopasse ümber asuda?
    • Tech Offshore arenduskeskuste võrdlus: Euroopa (Poola), ASEAN (Filipiinid), Euraasia (Türgi).
    • Millised on CTO ja CIOde peamised väljakutsed?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2025 by The Codest. Kõik õigused kaitstud.

    etEstonian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch elGreek etEstonian