13
Intro to RSpec & Unit Tests (Engineering So+ware as a Service §8.1) Armando Fox © 2013 Armando Fox & David Patterson, all rights reserved

Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

Intro  to  RSpec  &  Unit  Tests  (Engineering  So+ware  as  a  Service  §8.1)  

Armando  Fox  

© 2013 Armando Fox & David Patterson, all rights reserved

Page 2: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

Tes7ng  can  never  demonstrate  the  _____  of  errors  in  so=ware,  only  their  _______    

Debugging  is  twice  as  hard  as  wri7ng  the  code  in  the  first  place.  Therefore,  if  you  write  the  code  as  cleverly  as  possible,  you  are,  by  defini7on,  not  smart  enough  to  debug  it.  

absence

presence

Page 3: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –
Page 4: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

Tes7ng  Today  

•  Before  – developers  finish  code,  some  ad-­‐hoc  tes7ng    – “toss  over  the  wall  to  Quality  Assurance  [QA]”  – QA  staff  manually  poke  at  so=ware    

•  Today/Agile    –   tes7ng  is  part  of  every  Agile  itera7on  – developers  test  their  own  code  –  tes7ng  tools  &  processes  highly  automated    – QA/tes7ng  group  improves  testability  &  tools    

Page 5: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

Tes7ng  Today  

•  Before  – developers  finish  code,  some  ad-­‐hoc  tes7ng    – “toss  over  the  wall  to  Quality  Assurance  [QA]”  – QA  people  manually  poke  at  so=ware    

•  Today/Agile    –   tes7ng  is  part  of  every  Agile  itera7on  – developers  responsible  for  tes7ng  own  code  –  tes7ng  tools  &  processes  highly  automated;    – QA/tes7ng  group  improves  testability  &  tools    

So+ware  Quality  is  the  result  of  a  good  process,  rather  than  the  responsibility  of  

one  specific  group  

Page 6: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

BDD+TDD:  The  Big  Picture  

•  Behavior-­‐driven  design  (BDD)  –  develop  user  stories  (the  features  you  wish  you  had)  to  describe  how  app  will  work  

–  via  Cucumber,  user  stories  become  acceptance  tests  and  integraBon  tests  

•  Test-­‐driven  development  (TDD)  –  step  definiBons  for  new  story,may  require  new  code  to  be  wriWen  

–  TDD  says:  write  unit  &  func7onal  tests  for  that  code  first,  before  the  code  itself  

–  that  is:  write  tests  for  the  code  you  wish  you  had  

Page 7: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

Cucumber  &  RSpec  

•  Cucumber  describes  behavior  via  features  &  scenarios  (behavior  driven  design)  

•  RSpec  tests  individual  modules  that  contribute  to  those  behaviors  (test  driven  development)  

7  

Failing  (red)  Cucumber  step  

Failing  (red)  RSpec  test  

Passing  (green)  RSpec  test  

Passing  (green)  Cucumber  step  

Page 8: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

Only (a) & (b)"

Only (a) & (c)"

(a), (b) and (c)"

Only (a)"☐"

☐  

☐  

☐  

8  

Which are true about BDD & TDD:a) requirements drive the implementation"b) they can be used only in Agile development "c) they embrace & deal with change "

Page 9: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

FIRST,  TDD,  and  Ge[ng  Started  With  RSpec  

(Engineering  So+ware  as  a  Service  §8.2)  Armando  Fox  

© 2013 Armando Fox & David Patterson, all rights reserved

Page 10: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

Unit  tests  should  be  FIRST  

•  Fast  

•  Independent  

•  Repeatable  

•  Self-­‐checking  

•  Timely  

Page 11: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

Unit  tests  should  be  FIRST  

•  Fast:  run  (subset  of)  tests  quickly  (since  you’ll  be  running  them  all  the  Bme)  

•  Independent:  no  tests  depend  on  others,  so  can  run  any  subset  in  any  order  

•  Repeatable:  run  N  7mes,  get  same  result  (to  help  isolate  bugs  and  enable  automa7on)  

•  Self-­‐checking:  test  can  automaBcally  detect  if  passed  (no  human  checking  of  output)  

•  Timely:  wriWen  about  the  same  7me  as  code  under  test  (with  TDD,  wriWen  first!)  

Page 12: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

RSpec,  a  Domain-­‐Specific  Language  for  tes7ng  

•  DSL:  small  programming  language  that  simpifies  one  task  at  expense  of  generality  –  examples  so  far:  migra7ons,  regexes,  SQL  

•  RSpec  tests  are  called  specs  or  examples  

•  Run  the  tests  in  one  file:  rspec filename  –  Red  failing,  Green  passing,  Yellow  pending  

•  Much  beIer:  running    autotest!

http://pastebin.com/LKTK36Pb

Page 13: Intro&to&RSpec&&&UnitTests& · 1/3/2014  · Tes7ng&Today& • Before – developers&finish&code,&some&adHhoc&tes7ng&& – “toss&over&the&wall&to&Quality&Assurance&[QA]”& –

Only (b)"

Both (a) and (b)"

Neither (a) nor (b)"

Only (a)"☐"

☐  

☐  

☐  

13  

Which kinds of code can be tested Repeatably and Independently?"a) Code that relies on randomness (e.g. shuffling a deck of cards)"b) Code that relies on time of day (e.g. run backups every Sunday

at midnight)"