Beginning to Mock with Rhino Mocks and MbUnit - Part 1
page 2 of 7
by Ben Hall
Feedback
Average Rating: This article has not yet been rated.
Views (Total / Last 10 Days): 90017/ 100

What is a mock object?

A mock object is generally used as a stand-in, or replacement, for a real object while the system is being unit tested. The main purpose of using a mock object is to allow our tests to be more focused, self contained, predictable and reliable. By having our unit tests more isolated and predictable we can identify the cause of the failure in less time and false negatives (tests which fail but should pass) are reduced.

An example of when a mock object might be used is when a feature in your system is required to return different results based on the current time of day. Given this requirement, how could it be tested? It would have a number of problems, for example you would have to have different test logic depending on the time of day the tests where executed and worse, only being able to execute the test at certain times of the day in order for it to execute the conditional logic being tested. Identifying the real reason why a test has failed would also become a problem as it could be because of the code or because of the time the test was executed.

This is where mock objects become useful. A mock object would allow us to replace the unpredictable functionality of obtaining the time, and replace it with pre-setup logic with known values which we could test against. We could then write and configure different tests to take into account the different requirements without having to worry about when or where the tests are actually executed. This makes the tests more useful as they could be run and instantly report back if there was a problem.  As a result, tests can be run more often and problems are likely to be fixed in a much shorter time as one of the external dependencies which had the potential to cause problems has been removed.

Other reasons why you might want to use mock objects in your unit tests include:

·         Access to the real object is slow because of database calls or long calculations.

·         The real object uses a call back.

·         The real object requires access to external resources which are unavailable.

·         The real object has not finished being developed.


View Entire Article

User Comments

Title: "Program against interfaces"   
Name: Rogério Liesenfeld
Date: 2009-10-06 5:01:32 PM
Comment:
What exactly is meant here by "program against interfaces, one of the core OO design rules"?

Creating an IDateTime interface with a single DateTimeController implementation class is absolutely NOT what was intended by the GoF book (Design Patterns) when they said "program to interface, not an implementation".

That "core OO design rule" is about something else: polymorphism; and it's really only applicable in the context of reusable OO software, specifically for dependencies between subsystems. Not at all the case for the example in this article.
Title: Question   
Name: bangi
Date: 2009-05-06 9:37:40 AM
Comment:
Is it possible to mock an object to is called by the method that I am calling. Eg. 1SomeInterface has a method called GetUsers. GetUsers calls a method called findusers which belongs to a Interface IDataAccess. Is it correct to make a mock object for IDataAccess in my Test class hoping that when I call ISomeInterface when ISomeInterface gets to the IDataAccess.findusers() the mock version will be user instead of the real method.
Title: Thanks   
Name: dotnetguts
Date: 2008-10-27 2:23:56 PM
Comment:
Thanks, Good Information.

DotNetGuts
http://dotnetguts.blogspot.com
Title: Excellent   
Name: Iran
Date: 2008-09-13 7:17:49 AM
Comment:
Thanks a lot Ben for providing a simple start up guide for Rhino mocks
Title: Stubs v Mocks   
Name: Ben Hall
Date: 2008-05-27 6:49:28 AM
Comment:
\
Title: I recomended this book   
Name: Carlos
Date: 2008-05-27 6:04:34 AM
Comment:
This post is very well, but are confused concepts(STUBS-MOCKS)
I recommend reading this book is really good.

http://www.manning.com/osherove/
Title: Diference Stubs and Mocks   
Name: Carlos
Date: 2008-05-27 4:28:18 AM
Comment:
I think these confusing terms between STUBS and MOCKS.
You've created a mock, for help to test the class, this is a stub not a mock. I recommend you read this article.

http://martinfowler.com/articles/mocksArentStubs.html
Title: Great Tutorial   
Name: Steve Smith
Date: 2008-03-22 12:55:29 PM
Comment:
It didn't click for me until I read this - been trying to learn Rhino Mocks off and on for the last week. Nice job!
Title: Thanks for sharing   
Name: Jeena
Date: 2008-01-25 9:32:33 AM
Comment:
Very good article. Thanks a lot
Title: Good introduction to Rhino Mocks   
Name: Tod Birdsall
Date: 2007-12-27 5:55:43 PM
Comment:
Thanks for the nice introduction. It was very clear and easy to follow.
Title: .   
Name: Pawel Tarnik
Date: 2007-10-10 8:39:38 AM
Comment:
Nice article, I look forward to reading the next part.
Thanks.
Title: Beginning to Mock with Rhino Mocks and MbUnit - Part 1   
Name: Lee
Date: 2007-10-09 7:46:47 PM
Comment:
Thanks for the article - it's clear and easy to follow.

Product Spotlight
Product Spotlight 





Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2019 ASPAlliance.com  |  Page Processed at 2019-10-19 1:58:14 PM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search