Slide 1

Slide 1 text

G E T T I N G S TA R T E D W I T H 
 U N I T T E S T I N G A L I S O N B A R R E T T ’ S

Slide 2

Slide 2 text

W H O A M I ?

Slide 3

Slide 3 text

A L I S O N B A R R E T T • Code Wrangler at Automattic • @alisothegeek • http://alisothegeek.com

Slide 4

Slide 4 text

M Y J O U R N E Y

Slide 5

Slide 5 text

S O M E T I M E I N 2 0 1 1 Unit testing? What’s that? I’ll go find out.

Slide 6

Slide 6 text

Unit testing waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw waw…

Slide 7

Slide 7 text

S O M E T I M E I N 2 0 1 2 Oh yeah, unit testing. I should learn that sometime.

Slide 8

Slide 8 text

L AT E R I N 2 0 1 2 Oh so that’s what unit tests are…

Slide 9

Slide 9 text

L AT E R I N 2 0 1 2 OMG I AM SCARED PLZ REMOVE UNIT TESTS FROM BRAIN

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

R AT I O N A L I Z AT I O N Only crazy-smart devs use it. I’m not smart enough.

Slide 12

Slide 12 text

R AT I O N A L I Z AT I O N It’s a whole new framework. No time to learn it.

Slide 13

Slide 13 text

R AT I O N A L I Z AT I O N I bet it’s hard to set up.

Slide 14

Slide 14 text

R AT I O N A L I Z AT I O N It’s too hard.

Slide 15

Slide 15 text

WRONG

Slide 16

Slide 16 text

J U N E 2 0 1 3 I guess I’m learning unit testing today.

Slide 17

Slide 17 text

J U N E 2 0 1 3 OMG THIS IS SO EASY AND FUN AND AMAZING

Slide 18

Slide 18 text

L A T E R T H A T J U N E

Slide 19

Slide 19 text

J U N E 2 0 1 3 UNIT TEST ALL THE THINGS

Slide 20

Slide 20 text

A L S O I N J U N E I need a new topic for WCSF… Unit testing!

Slide 21

Slide 21 text

E X P E R T A D V O C AT E E X P E R T AT A D V O C AT I N G

Slide 22

Slide 22 text

W H AT I S U N I T T E S T I N G ?

Slide 23

Slide 23 text

In computer programming, unit testing is a method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures are tested to determine if they are fit for use. Intuitively, one can view a unit as the smallest testable part of an application. In procedural programming, a unit could be an entire module, but is more commonly an individual function or procedure. In object-oriented programming, a unit is often an entire interface, such as a class, but could be an individual method. Unit tests are created by programmers or occasionally by white box testers during the development process. T L ; D R ?

Slide 24

Slide 24 text

D O E S T H I S F U N C T I O N W O R K ?

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

assertArrayHasKey() assertClassHasAttribute() assertClassHasStaticAttribute() assertContains() assertContainsOnly() assertContainsOnlyInstancesOf() assertCount() assertEmpty() assertEqualXMLStructure() assertEquals() assertFalse() assertFileEquals() assertFileExists() assertGreaterThan() assertGreaterThanOrEqual() assertInstanceOf() assertInternalType() assertJsonFileEqualsJsonFile() assertJsonStringEqualsJsonFile() assertJsonStringEqualsJsonString() assertLessThan() assertLessThanOrEqual() assertNull() assertObjectHasAttribute() assertRegExp() assertStringMatchesFormat() assertStringMatchesFormatFile() assertSame() assertSelectCount() assertSelectEquals() assertSelectRegExp() assertStringEndsWith() assertStringEqualsFile() assertStringStartsWith() assertTag() assertThat() assertTrue() assertXmlFileEqualsXmlFile() assertXmlStringEqualsXmlFile() assertXmlStringEqualsXmlString() H T T P : / / A L I S O . M E / A S S E R T

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

T H E R E G E X S T O RY

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

1 0 ! = 1

Slide 37

Slide 37 text

T I M E F O R S O M E E X P E RT A D V O C AT I N G

Slide 38

Slide 38 text

C U R R E N T P R O B L E M Testing by debugging

Slide 39

Slide 39 text

C U R R E N T P R O B L E M , W O R S E V E R S I O N Testing by debugging without version control or staging environments

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

S O L U T I O N Unit testing! DUH (it’s the topic of this presentation)

Slide 42

Slide 42 text

W H Y U N I T T E S T I N G ? Automation saves time Debugging is easier Code is future-proof Architecture is modular Tests double as documentation

Slide 43

Slide 43 text

A U T O M AT I O N S AV E S T I M E

Slide 44

Slide 44 text

Good, Fast, Cheap. Pick two.

Slide 45

Slide 45 text

Writing unit tests: Good

Slide 46

Slide 46 text

Running unit tests: Good, Fast, Cheap

Slide 47

Slide 47 text

D E B U G G I N G I S E A S I E R

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

C O D E I S F U T U R E - P R O O F

Slide 50

Slide 50 text

E V E RY O N E ’ S FAV O R I T E Refactoring

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

A R C H I T E C T U R E I S M O D U L A R

Slide 53

Slide 53 text

D O E S T H I S F U N C T I O N W O R K ?

Slide 54

Slide 54 text

??? it does a bazillion things D O E S T H I S F U N C T I O N W O R K ?

Slide 55

Slide 55 text

YES Ask me a harder question for once D O E S T H I S F U N C T I O N W O R K ?

Slide 56

Slide 56 text

T E S T S D O U B L E A S D O C U M E N TAT I O N

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

Y O U R J O U R N E Y

Slide 59

Slide 59 text

Y O U UNIT TEST ALL THE THINGS WRONG (sort of) UNIT TEST ALL THE THINGS

Slide 60

Slide 60 text

J U LY 2 0 1 3 That unit testing worked great on the last bug! I’ll use it for this bug too!

Slide 61

Slide 61 text

2 0 H O U R S L AT E R This would have taken 5 minutes… if it wasn't for you meddling unit tests!

Slide 62

Slide 62 text

Y O U M I G H T N O T WA N T T O U N I T T E S T I F… • You’re on a really tight deadline. • The budget is really tight and speed is important. • You’re on a really tight deadline. • You’re on a really tight deadline and you can’t unit test like a boss (yet).

Slide 63

Slide 63 text

Y O U But I still want to unit test!

Slide 64

Slide 64 text

I D E A Try it on your own site.

Slide 65

Slide 65 text

I D E A Try it on a local installation.

Slide 66

Slide 66 text

I D E A Try it on a pro-bono project that has time to spare.

Slide 67

Slide 67 text

T H A N K Y O U