From ce56bc788638f527bd90d27b74e3ec43fe422116 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sun, 15 Jan 2017 18:48:07 +0300 Subject: [PATCH] Mocks vs. stubs --- tdd.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 tdd.md diff --git a/tdd.md b/tdd.md new file mode 100644 index 0000000..400cdff --- /dev/null +++ b/tdd.md @@ -0,0 +1,32 @@ +## Test doubles + +Meszaros uses the term Test Double as the generic term for any kind of +pretend object used in place of a real object for testing purposes. Meszaros +then defined four particular kinds of double: + +* **Dummy** objects are passed around but never actually used. Usually they + are just used to fill parameter lists. +* **Fake** objects actually have working implementations, but usually take + some shortcut which makes them not suitable for production (an in memory + database is a good example). +* **Stubs** provide canned answers to calls made during the test, usually not + responding at all to anything outside what's programmed in for the test. + Stubs may also record information about calls, such as an email gateway + stub that remembers the messages it 'sent', or maybe only how many messages + it 'sent'. +* **Mocks** are what we are talking about here: objects pre-programmed with + expectations which form a specification of the calls they are expected to + receive. + + +## Mocks vs. Stubs + +* A stub uses state verification while a mock uses behavior verification. +* In order to use state verification on the stub, we need to make some extra + methods on the stub to help with verification (e.g. add + a `MailServiceStub.numberSent()` method) +* Mock objects always use behavior verification, a stub can go either way. + +--- + +**Reference:** https://www.martinfowler.com/articles/mocksArentStubs.html