By Mike Hill, Gil Broza

How do you write microtests against old, complicated code? Redesigning the code can help, yet often you'll still need to deal with awkward collaborators: calls to objects that are slow or difficult to test. Vanquish awkward collaborators by learning a family of fakes, including simulators, stubs, listening and talking fakes, mocks and auto-mocks.

Get this Album

Volume Licensing

Have Any Questions?


Expert Videos: Learn tools & techniques by watching short videos from industry experts. Learn more...
Integrated Forums: Ask questions, get expert replies and read fascinating discussions. Learn more...


  • 4-7 hours of content
  • 145 pages of content
  • 11 Interactive quizzes
  • 4 Videos
  • 4 Exercises:
  • Support for Eclipse
  • Support for IntelliJ


You Are Here 3
Roll The Dice: A Faking Opportunity 4
This Album 5
Roll The Dice Fakelessly 7
Download the Code 8
Steps For The Exercise 9
Our Solution 10
Points To Ponder 11
Awkward By Domain: The Maker & The Dice 13
One Weak Microtest 14
The Goal 15
Download the Code 16
Steps For The Exercise 17
Our Solution 18
Key Points For Your First Fake 19
Intro to Auto-Mocking 21
Some Details for the Automocker 22
Download the Code 23
Steps For The Exercise 24
Our Solution 25
Points To Ponder 26
Keyword: Awkward Collaboration ← Click to Preview 28
Awkward Results: Indeterminacy 29
Awkward Setup: Ugly Tests 30
Awkward Runtime: Slow = No 31
Awkward Control: Uncontrolled I/O 32
Trust Your Pain 33
Microtesting Awkward Collaborations 35
Real Life Vs. Test Life 36
The Big Idea 37
Types Of Fake 38
Fakes, Roses, And Terminology 39
Aren't You Really Hacking The Code? ← Click to Preview 40
Not Testing All 41
Microtesting Works 42
Slipping In A Fake 44
Keyword: Stub 45
An Awkward Collaboration 46
Awkward Enough For A Stub? 47
Keyword: Talking Fake 48
Example: InventoryControlTalkingFake 49
Taking It One Step Further 50
Keyword: Listening Fake 51
Example: OrderLogListeningFake 52
The Relationship Between Fake And Awkward ← Click to Preview 53
Refactoring To Facilitate Faking 55
Easy Slip #1: Method Argument Slip 56
Slipping Technique: Parameterize Method 57
Easy Slip #2: Constructor Argument Slip 58
Slipping Technique: Alternate Constructor 59
Slipping Technique: Passing A Factory 60
Problem: Several Awkward Collaborators Example 61
Solution: Several Awkward Collaborators Example 62
Slipping A Fake, Dependency Injection and Inversion Of Control ← Click to Preview 63
SlippingTechnique: Extract and Override ← Click to Preview 64
Slipping Technique: Introduce Adapter 65
Introduce Adapter Example 66
Adapter in Pictures 67
Review: Slipping Techniques 68
Introduction 70
The Code 71
Existing Microtests 72
Download The Code 73
The First Case Of Slowness 74
Our Solution 75
Great Microtests 76
Make A Stub For Shipper 77
Slipping A Shipper Stub Solution ← Click to Preview 78
Making a Listening Fake 79
Listening Fake Solution 80
Our Love/Hate Relationship With Singletons 82
Problems With Singletons 83
So, No Static Objects? 84
Solutions to Singletons 85
Slipping Technique: Alternate Construction 86
Slipping Technique: Set Fake Singleton 87
Set Fake Singleton Example ← Click to Preview 88
Slipping Technique: Redirection 89
Redirection Example 90
Static Collaborator: Another Example 91
Static Collaborator: Possible Solution 92
Exercise: Faking A Singleton 94
A First Attempt 95
Download The Code 96
Double Awkwardness 97
Hints 98
Our Solution 99
A Little Story 101
What It Looks Like 102
Robin To The Rescue: FakeTransactionLog 103
The Same Test Every Time 104
What To Do? 105
Keyword: Mock 106
Is That All? 107
Big Idea: Interaction, Not State ← Click to Preview 108
Big Idea: Mocks Can Be Made Automagically 109
How Are Mocks Born? 110
Auto-Mocks: Let the Computer Do It 112
Caution! 113
Mockito Makes Mocks 114
How Mocking Works 115
Using Mocks In A Typical Test 116
Deciphering The Pattern In Test 117
Try That Again In English 118
Ignoring Calls On The Mock 119
Verify The Expectations 120
Invocation Counts 121
Argument Matching 122
Adding A Return Value 123
Sequences 124
The Rest Of The Story 125
Final Advice 126
Automocking Expectations 128
The Challenge 129
The Code 130
Awkwardness ← Click to Preview 131
Download The Code 132
Your Mission: The Simplest Case 133
Solution For The Simplest Case 134
The Second Task 135
Solution For The Second Task 136
The Last Task 137
Solution For The Last Task 138
A Hardware Situation 140
Keyword: Simulator 141
Simulators In Practice 142
The Real Role Of Simulators 143
Conclusion: What's Next? 145

Related Items

Supported Browsers

  • Latest Firefox
  • Internet Explorer 8+
  • Latest Chrome
  • Latest Safari

Operating Systems

  • Windows
  • Linux
  • Mac OS X

Development Tools

You can use whatever developments tools you prefer. If you do use an IDE (Integrated Development Environment), many (though not all) of our labs come with projects pre-configured for Eclipse, IntelliJ and Visual Studio.

Speakers or headphones are required for our videos.

Flash is required to view charts or watch videos — download for free.