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
  • 144 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
Awkward By Domain: The Maker & The Dice 7
One Weak Microtest 8
The Goal 9
Steps For The Exercise 10
Download the Code 11
Our Solution 12
Key Points For Your First Fake 13
Roll The Dice Fakelessly 15
Steps For The Exercise 16
Download the Code 17
Our Solution 18
Points To Ponder 19
Intro to Auto-Mocking 21
Steps For The Exercise 22
Some Details for the Automocker 23
Download the Code 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
Slipping Technique: Introduce Adapter 64
Introduce Adapter Example 65
Adapter in Pictures 66
Review: Slipping Techniques 67
Introduction 69
The Code 70
Existing Microtests 71
Download The Code 72
The First Case Of Slowness 73
Our Solution 74
Great Microtests 75
Make A Stub For Shipper 76
Slipping A Shipper Stub Solution ← Click to Preview 77
Making a Listening Fake 78
Listening Fake Solution 79
Our Love/Hate Relationship With Singletons 81
Problems With Singletons 82
So, No Static Objects? 83
Solutions to Singletons 84
Slipping Technique: Alternate Construction 85
Slipping Technique: Set Fake Singleton 86
Set Fake Singleton Example ← Click to Preview 87
Slipping Technique: Redirection 88
Redirection Example 89
Static Collaborator: Another Example 90
Static Collaborator: Possible Solution 91
Exercise: Faking A Singleton 93
A First Attempt 94
Download The Code 95
Double Awkwardness 96
Hints 97
Our Solution 98
A Little Story 100
What It Looks Like 101
Robin To The Rescue: FakeTransactionLog 102
The Same Test Every Time 103
What To Do? 104
Keyword: Mock 105
Is That All? 106
Big Idea: Interaction, Not State ← Click to Preview 107
Big Idea: Mocks Can Be Made Automagically 108
How Are Mocks Born? 109
Auto-Mocks: Let the Computer Do It 111
Caution! 112
Mockito Makes Mocks 113
How Mocking Works 114
Using Mocks In A Typical Test 115
Deciphering The Pattern In Test 116
Try That Again In English 117
Ignoring Calls On The Mock 118
Verify The Expectations 119
Invocation Counts 120
Argument Matching 121
Adding A Return Value 122
Sequences 123
The Rest Of The Story 124
Final Advice 125
Automocking Expectations 127
The Challenge 128
The Code 129
Awkwardness ← Click to Preview 130
Download The Code 131
Your Mission: The Simplest Case 132
Solution For The Simplest Case 133
The Second Task 134
Solution For The Second Task 135
The Last Task 136
Solution For The Last Task 137
A Hardware Situation 139
Keyword: Simulator 140
Simulators In Practice 141
The Real Role Of Simulators 142
Conclusion: What's Next? 144

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.