Talk:Mock object

Merge this
Mock objects are used in TestDrivenDesign (TDD). A class may interact with various neighbouring objects. When writing a unit test for the primary class, neighbouring classes are replaced with mock objects. In the test, these behave just like real objects. The programmer will set up return values for mock object methods as well as expectations for the number of times each method is called. Expected arguments for each mock method call can also be defined.

In this way, the primary class can be tested without the secondary, neighbouring objects having to exist at all. This allows testing to be used as a design tool: you can start at the top and watch the design riple out as you work your way down. Once a primary object and its test has been written, the mocks (and further unit tests) are implemented.

Rework
I hope I managed to make this article more accessible to laypeople; in particular, I felt that the e-mail client example was too technical for this article. I realize most of us Wikipedia geeks are, well, geeks, but really, this isn't Slashdot. Ataru 18:51, 28 June 2006 (UTC)

I agree; your alarm clock example is much better. --Babomb 06:04, 29 June 2006 (UTC)

Stub vs Mock
Would a reference to the fact that many people would still use the term "stub" make everything clearer. A stub is a "mock object" a "mock object" is a stub. Stubs are used in both procedural and OO languages. —Preceding unsigned comment added by 172.206.19.160 (talk • contribs)


 * Despite the fact that 90% the distinction makes little difference, proponents of Extreme Programming usually assert that they are different entities, on the ground that while stubs only act as placeholders for volatile services, mock objects can also have expectations attached to them. Martin Fowler wrote a very good piece on this: http://www.martinfowler.com/articles/mocksArentStubs.html &mdash; Edward Z. Yang (Talk) 01:31, 28 October 2006 (UTC)


 * Agreed. The article shouldn't say that mocks "are" stubs, but it's probably a good idea to include a section comparing them to stubs or at least mention that they're similar, instead of just having stubs in the "see also". Babomb 17:47, 28 October 2006 (UTC)

Suggestion: 'Mocking the Embbedded World' external link change?
I'd like to suggest a change to the final link in the list of external links ("Mocking the Embedded World"). I am the principal author of the original paper.

Methods & Tools Newsletter (the current destination of the link being discussed) approached me asking if they could publish the work. I agreed and provided an edited and condensed version of the original paper.

The full paper AND an executable example project can be found at another link (http://www.atomicobject.com/pages/Embedded+Software#MockingEmbeddedWorld). Perhaps this is a more useful external link; as such, I offer for consideration that the link be updated. Mkarlesky (talk) 18:24, 22 January 2008 (UTC)


 * Having not seen any objections, I've gone ahead and updated the 'Mocking the Embedded World' external link to the one suggested above. Mkarlesky (talk) 21:21, 29 January 2008 (UTC)

Mocks are not Like Crash Dummies.
The analogy doesn't work. A mock isn't the object being tested, it facilitates the testing of other object. If a crash dummy is a mock, then the test is what happens to a car dashboard when a human body slams into it at 60mph. — Preceding unsigned comment added by 2605:6000:898D:CB00:4D87:538E:2F57:9E21 (talk) 19:40, 31 January 2017 (UTC)
 * Hmm.
 * Software under test = car under test;
 * database written by software = driver or passenger in car;
 * mock database = crash test dummy;
 * software is tested in use = car is tested in use
 * mock may be examined after test = dummy may be examined after test
 * at least no real database was filled with rubbish = at least no real person was hurt in car
 * --Nigelj (talk) 23:42, 31 January 2017 (UTC)
 * I was going say that crash test dummy was a poor analogy for mock before finding this topic. But ... the analogy is correct in the respect that Nigelj points out. My issue is that a mock is generally very a simple thing. What I think of as a crash test dummy is not simple. It's a highly designed simulator; a system in and of itself. Thing is, it's an analogy ... and as such is only an approximation. IMO I think it's suspect whether WP should contain any analogies due to there inherent limitations. Stevebroshar (talk) 12:26, 4 May 2024 (UTC)

This article lacks clarity
Much has changed since this article was first written, including the definition of mocks, fakes, and stubs. The newest reference OP used for this in the following section was from a StackOverflow post in 2010.

Mocks, fakes, and stubs

Classification between mocks, fakes, and stubs is highly inconsistent across the literature. Consistent among the literature, though, is that they all represent a production object in a testing environment by exposing the same interface.

I propose updating to include clear definitions, referencing these articles:


 * https://www.turing.com/kb/stub-vs-mock


 * https://www.parasoft.com/blog/benefits-of-service-virtualization-beyond-stubbing-mocking/

Hcsnoke (talk) 15:26, 4 April 2023 (UTC)


 * What evidence did you have that the definitions have changed?
 * What would be the definition difference based on these articles?
 * Parasoft is a commercial vendor that has potential conflict of interest, I would recommend using at least at some level peer reviewed content, like InfoQ https://www.infoq.com/articles/twelve-testing-techniques-microservices-intro/ Wojtek-tp (talk) 15:39, 4 April 2023 (UTC)
 * On revisiting this, the error appears to be mine in how I read the section; understanding classification as a distinction between items of similar qualities, on which the literature seems clear on which does what. Hcsnoke (talk) 17:08, 4 April 2023 (UTC)
 * IMO there is lack of consensus on terminology of the classifications/types of test doubles. ... Even test double is dubious since few use that term, but it's the only term I've seen referenced that covers all such test-time imitation things. Like many things in the world, there are authors who talk of concepts and then there are inventors (i.e. tool vendors) that implement them ... who often use different terms. ... WP rules say info is supposed be cited which means from authors, but the things in the wild (real word) are often called something else. To follow its rules, WP article needs to be academic. To be useful, it needs to break its rules :) (I went way off topic :o) Stevebroshar (talk) 12:35, 4 May 2024 (UTC)