Testautomatisering. BDD, RSpec

Relevanta dokument
Testautomatisering. Labbar, FitNesse, TDD, BDD

Testautomatisering. Ruby Repetition

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

Övning 1 - Abstrakta datatyper

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

Föreläsning 4 IS1300 Inbyggda system

Konstruktion av datorspråk

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Guide Ett FitNesse-test

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Services + REST och OAuth

Föreläsning Datastrukturer (DAT037)

Övning 1: Skapa virtuell maskin för utveckling.

Beijer Electronics AB 2000, MA00336A,

Föreläsning Datastrukturer (DAT036)

Support Manual HoistLocatel Electronic Locks

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Mer om språk och Ruby

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Övning 1. Abstrakta datatyper. 1. Stacken. class Stack: """A representation of a last-in-first-out (LIFO) stack of objects."""

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions

Testautomatisering. Intro

Hur hanterar vi risk? Vad är TKO? Skillnad på agil och trad? Agil/Lean: Defer Commitment, Build knowledge, Fail fast

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Mer om språk och Ruby

Föreläsning Datastrukturer (DAT037)

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Den Röda Tråden. Vi kan ta fram arkitekturkrav. Vi kan ta fram arkitektur och design. Vi kan skriva Clean Code KRAV DESIGN IMPLEMENT VISION TEST

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Testning. 1DV404, HT14 Jesper Andersson Kap 21 + Testing Primer

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Länkade strukturer. (del 2)

Calculate check digits according to the modulus-11 method

AGIL KRAVHANTERING. Hitta behoven bakom kraven!! Thomas Nilsson! Agile Coach & Mentor! CTO, Responsive

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Isolda Purchase - EDI

Grundläggande datalogi - Övning 2

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

Dugga Datastrukturer (DAT036)

Stackar, köer, iteratorer och paket

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Vässa kraven och förbättra samarbetet med hjälp av Behaviour Driven Development Anna Fallqvist Eriksson

Föreläsning Datastrukturer (DAT036)

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Quick Start Guide Snabbguide

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Alternativet är iwindows registret som ni hittar under regedit och Windows XP 32 bit.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Chapter 4: Writing Classes/ Att skriva egna klasser.

GeoGebra in a School Development Project Mathematics Education as a Learning System

Övning 2. (Länkade) Listor, noder

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Förstå grunderna i LINQ. Mål med lektionen!

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Rev No. Magnetic gripper 3

Vad betyder TDD? Test Driven Design?

Programmering och algoritmiskt tänkande. Tema 3, föreläsning 1 Jody Foo

Kursplan. NA1032 Makroekonomi, introduktion. 7,5 högskolepoäng, Grundnivå 1. Introductory Macroeconomics

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Föreläsning 8 Datastrukturer (DAT037)

Att skriva till och läsa från terminalfönstret

Versionshantering. Jan Erik Moström

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Testautomatisering. HTML, Dev Tools, Watir

Föreläsning 3. Programmering, C och programmeringsmiljö

Institutionen för datavetenskap HT /2008. Testning med JUnit

Generisk klass med typparameter Inre klass - ListIterator

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 8: Exempel och problemlösning

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Om inte denna rekommendation efterföljs kan vi tyvärr inte ge några garantier för att vi kan supportera de problem som då kan uppstå.

Grupp Policys. Elektronikcentrum i Svängsta Utbildning AB

GIT L0012B. Implementation av geografiska informationssystem. Information inför kursstart

InstalationGuide. English. MODEL:150NHighGain/30NMiniUSBAdapter

Objektsamlingar i Java

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

2.1 Installation of driver using Internet Installation of driver from disk... 3

1.1 Invoicing Requirements

För att kunna byta till online licens (man kan alltid byta tillbaka) så behöver man ha några saker redo innan man börjar denna guide.

TDDC74 Programmering: Abstraktion och modellering. Provkod TEN1, Tid: kl 14-18, , Kåra

UML use cases. Mikael Söderström Institutionen för informatik Umeå universitet

Classes och Interfaces, Objects och References, Initialization

Kurskod D0010E Datum Skrivtid 5tim

Installation av F13 Bråvalla

Föreläsning Datastrukturer (DAT036)

INSTALLATION INSTRUCTIONS

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Transkript:

Testautomatisering BDD,

FM: Snabbutvärdering, lab BDD Idag

Lab2 - Snabbutvärdering 1. Hur många timmar har du lagt? 2. Hur många ytterligare timmar kommer du lägga? 3. Svårighet: För Lätt / Lagom / För Svår 4. Lärdommar - Jag ser... : Ingen praktisk nytta (-) Viss praktisk nytta (0) Stor praktisk nytta (+) Kort om labben

TDD Test Driven Development I korthet: vi utvecklar testerna innan implementationen de skall testa TDD

TDD Red -> Green -> Refactor -> repetera Red: Skriv ett test som ger fail Green Skriv tillräckligt utav implementationen för att få pass Refactor: Är vi nöjd med implementation och test? Om inte gör förändringar med de test vi skrivit som stöd. skriv nästa test TDD

TDD Vad får vi? För det mesta: En robustare implementation (Mer modulär, etc.) (Vissa) Regressionstester på köpet! (Vi kan behöva ytterliggare regressionstester - men vi bör ha en hyfsad plattform att utgå ifrån här). Mindre skräp (Vi skriver endast tillräckligt med implementation för att testet skall passera) M.m. TDD

TDD Varning Vi bör ha någon uppfattning om de övergripande strukturen för vårt projekt innan vi börjar med TDD. TDD

TDD Problem Vi riskerar att missa helheten? Vad är affärsnyttan? TDD

BDD Behaviour Driven Develpment I korthet: Vi låter det önskade beteendet styra designen. BDD uppstod som en reaktion på de problem som uppstod då man utvecklade enligt TDD BDD

BDD vs TDD BDD bygger på TDD TDD fortfarande mer vanligt BDD utforskar vad ett objekt gör, medans TDD utforskar vad ett objekt är. Om detta är otydligt, var inte orolig: Vi kommer prata BDD imorrn och på fredag också. BDD

är ett testramverk för Ruby (motsvarande Test::Unit som vi kikade på förra veckan) kan användas för att skriva enhetstester kan användas för TDD Vi kommer använda det för BDD

Rspec - Installation gem install rspec (eller för xubuntu VM: sudo gem install rspec)

Rspec Subject code: koden vi beskriver Expectation: Hur koden vi beskriver förväntas bete sig Example: Ett körbart exempel på hur koden vi beskriver kan användas Example Group: En grupp av kodeexempel Spec file: En eller fler a Example Groups

Rspec Beskriv ett nytt konto Det skall innehålla 0 USD

Rspec Beskriv ett nytt objekt av typen Account Beskrivning: Dess property balance skall innehålla ett objekt av typen Money. Moneyobjektet skall representera 0 USD.

Rspec - exempel describe A new Account do it should have a balance of 0 do account = Account.new account.balance.should = Money.new(0, :USD) end end

Rspec Ett example resulterar i ett test och man kan även ta ut en rapport (en beskrivning av testet som är tänkt att vara läsbar för vilken stakeholder som helst).

Rspec module Authentication describe User, with no roles assigned do end

Rspec Authentication::User with no roles assigned

Rspec describe User do describe User, with no roles assigned do it should not be allowed to view protected content do

Rspec User with no roles assigned - should not be allowed to view protected content

Rspec - describe Describe-metoden: Tar 1-2 argument Första argumentet är en klass eller en sträng Andra argumentet är optional och bör vara en sträng

Rspec - exempel Describe A User { } => A User Describe User { } => A User

Rspec - exempel describe User with no roles assigned { } => A User with no roles assigned describe User should require password length between 5 and 40 { } => User should require password between 5 and 40

Rspec it() describe A new Account do it should have a balance of 0 do account = Account.new account.balance.should = Money.new end end

Rspec it() Argument: En sträng, en optional Hash och ett optional block

Rspec it() describe Stack do before(:each) do @stack = Stack.new @stack.push :item end forts. nästa sida

Rspec it() describe #pop do it should return the top element do @stack.pop.should == :item end it should remove the top element do @stack.pop @stack.size.should == 0 end end

Rspec it() Varför pending block? describe #pop do it should return the top element End => Pending: #pop should return the top element

Rspec it() Dvs. vi kan skriva in våra förväntade tester utan att behöva implementera dem Bra när vi utvecklar tester för att enklare se helheten.

Rspec before describe Stack do before(:each) do @stack = Stack.new @stack.push :item end end Körs innan varje test likt setup i Test::Unit

Rspec before Vi kan dock göra mer med before Vi kan använda det för att sätta olika kontext för olika test

Rspec before describe Stack, when empty do before(:each) do @stack = Stack.new end end describe Stack, when almost empty (1 element) do before(:each) do @stack = Stack.new @stack.push 1 end end

Rspec before describe Stack, when full do before(:each) do @stack = Stack.new {1..10}.each { n @stack.push n} end end

Rspec before Men vi har också möjligheten att göra ngt innan alla tester describe Stack do before(:all) do @stack = Stack.newend End Vi kan använda både before(:all) och before(:each) för samma klass.

Rspec before Before är extremt nyttigt. Det är väldigt sällan man vill ha samma setup för samtliga tester. Ofta har man istället grupper av test, där 3-4 tester använder samma preconditions

Rspec after after(:each) after(:all)

Rspec hjälpmetoder Precis som i Test::Unit kan vi använda oss av hjälpmetoder

Rspec hjälpmetoder module UserExampleHelpers def create_valid_user return User.new( user, password ) end def create_invalid_user return User.new( user, pass ) end end

Rspec hjälpmetoder describe User do include UserExampleHelpers it does something when it is valid do @user = create_valid_user end end

Rspec nästlade test describe Stack do describe when full do describe when it recieves a push do it should raise an error do #.should raise_error(stackoverflowerror) end end end end

Rspec Expectations should och should_not

Rspec Expectations should och should_not test_user = User.new( First, Last ) test_user.should == First Last test_user.should_not == FirstLast

Rspec Expectations should och should_not [1,2,3].should_not == [1,2,3,4] [1,2,3].lenght.should == 3

Rspec Expectations should och should_not [1,2,3].should_not == [1,2,3,4] [1,2,3].lenght.should == 3

Rspec Expectations should och should_not [1,2,3].should_not == [1,2,3,4] [1,2,3].lenght.should == 3 [1,2,3].should include(3)

Rspec Expectations match Totals: 12.should match(/totals: 12/)

Rspec Expectations raise_error lambda {User.new}.should raise_error(argumenterror)

Rspec Expectations be_ Om objektet har en metod som slutar på? Istället för Array.empty?.should == true Säger vi: Array.should be_empty

Rspec Expectations be_ User har en in_role?(role)-metod => user.should be_in_role( Admin )

Rspec Expectations have Om objektet har en metod som börjar med has_ Istället för hash.has_key?(:id).should == true Säger vi: hash.should have(:key)

Rspec Expectations have Collections - ibland Istället för team.length.should == 9 Säger vi: team.should have(9).players() OBS! här krävs det lite ytterligare se boken kap 11 för mer info

Rspec describe it pending before after Hjälpmetoder Nästlade test

Class TestSomeClass < Test::Unit::TestCase => describe SomeClass def test_something => it should do something descriptive def setup => before(:each) def teardown => after(:each) assert_equal(4,array,length, ) array.length.should == 4 vs Test::Unit

Rspec Saker vi inte tagit upp Shared Examples Lambda { user.create!(:role => admin)}.should change{user.admins.count} Rspec

Rspec Kodexempel

BDD Hur passar det här in i BDD? Ännu har vi inte tagit upp särskillt mycket nytt gör ungefär samma saker som Test::Unit Vi behöver ytterligare en pusselbit

BDD Cucumber Detta är ett verktyg för utveckling enligt BDD Exempel: Vi kommer kika på detta imorrn Unit Test

BDD Exempel Feature: Division In order to avoid silly mistakes Cashiers must be able to calculate a fraction Scenario: Regular numbers * I have entered 3 into the calculator * I have entered 2 into the calculator * I press divide * the result should be 1.5 on the screen Cucumber

Källor The book Främst Rspec-kapitlet (Kap 10-11 i min utgåva)

Cucumber Lab 3 Innan dess: Installera rspec gem (gem install rspec) Gå in på http://rspec.info Kör igenom deras bowling_spec - exempel Säkerställ att allting verkar fungera require bowling => require./bowling.rb Nästa gång

Fin