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
  • 3 Exercises
  • Coverage of gMock
  • Platform-independent code
  • Support for Visual Studio
  • Support for Eclipse CDT
  • Uses Google Test


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
Slipping Technique: Introduce Adapter 64
Introduce Adapter Example 65
Adapter in Pictures 66
Slipping Technique: Templatize Collaborator Type 67
Templatize Collaborator Type Example ← Click to Preview 68
Would You Use This Technique? 69
Review: Slipping Techniques 70
Introduction 72
The Code 73
Existing Microtests 74
Download The Code 75
The First Case Of Slowness 76
Our Solution 🎦 77
Great Microtests 78
Make A Stub For Shipper 79
Slipping A Shipper Stub Solution 🎦 ← Click to Preview 80
Making a Listening Fake 81
Listening Fake Solution 🎦 82
Our Love/Hate Relationship With Singletons 84
Problems With Singletons 85
So, No Static Objects? 86
Solutions to Singletons 87
Slipping Technique: Alternate Construction 88
Slipping Technique: Set Fake Singleton 89
Set Fake Singleton Example ← Click to Preview 90
Slipping Technique: Redirection 91
Redirection Example 92
Static Collaborator: Another Example 93
Static Collaborator: Possible Solution 94
Exercise: Faking A Singleton 96
A First Attempt 97
Download The Code 98
Double Awkwardness 99
Hints 100
Our Solution 101
A Little Story 103
What It Looks Like 104
Robin To The Rescue: FakeTransactionLog 105
The Same Test Every Time 106
What To Do? 107
Keyword: Mock 108
Is That All? 109
Big Idea: Interaction, Not State ← Click to Preview 110
Big Idea: Mocks Can Be Made Automagically 111
How Are Mocks Born? 112
What are Auto-Mocks? 114
Five Steps To gMocking 115
A Video Introduction to gMock 116
Quick Reference: The Method Declaration Syntax 117
Quick Reference: The ON_CALL Syntax 118
Quick Reference: The EXPECT_CALL Syntax 119
Yowza! 120
Let's Play 'Find The Mock' 121
Quick Reference: Exact Parameter Matching 122
Quick Reference: Matchers 123
Quick Reference: Sequences 124
Quick Reference: Actions 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.