Unit
testing is all about testing the functionalities of the class under test and
not its dependencies. It is some time difficult to unit test dependency
classes. For example database components, web services, event channels or a
component which involves any type of server etc. For these scenarios instead of
using the real instances of these dependencies it would very nice to replace
them with mock objects. All my previous projects I prefer to use interfaces and
create mock objects for them. It is very easy to understand and implement. . Its
purpose is to ease testing by allowing the developer to create mock implementations
of custom objects and verify the interactions using unit testing. Rhino mocks
have high importance in TDD development world.
Well, this
is not something new that we are trying to re invent but, trying to share my
experience of using Rhino Mocks in .net application and providing solution to
resolve build error after including rhino mocks dll reference to your project.
Sample:
It is
Simple to use Rhino Mocks first you need to download Rhino Mocks then unzip it
somewhere on your hard drive. Then in
your projects just go to add references in the solution explorer then the
browse tab then find the assembly where you unzipped it and there you go.
This is
a simple application which tells us how to consume rhino mocks and write a
sample unit test. To keep it simple I have used primitive data types as return
type from mock service.
Firstly, don't
forget to add references to NUnit and your Rhino Mocks assemblies.
Code:
1: using Rhino.Mocks;
2: using NUnit.Framework;
3: interface IEmailServer
4: {
5: bool TrigerEmail();
6: }
7: public class EmailServerAbstractlayer : IEmailServer
8: {
9: public bool TrigerEmail()
10: {
11: return true;
12: }
13: }
14: [TestFixture]
15: public class EmailServerClient
16: {
17: [Test]
18: public void SaveClientInformationTestWithMock()
19: {
20: // logic to add Save Client Information
21: //Logic to test Trigger Email after saving the data.
22: var expected = true;
23: IEmailServer emailServer = new EmailServerAbstractlayer();
24: Assert.AreEqual(true, emailServer.TrigerEmail().Equals(expected));
25: }
26: }
Problem:
When You
compile this code you will get below exception:-
“The type or
namespace name 'Rhino' could not be found (are you missing a using directive or
an assembly reference?)”
Solution:
If you are getting this exception please do below steps:
1)
Check your project properties –>
Application -> Target framework. If
it’s set to a “Client Profile” (.NET Framework 3.5 Client Profile or .NET Framework
4 Client Profile), Rhino won’t work. The
proxy system built into Rhino needs the full .NET Framework. Change the Target
Framework to a “Full” framework, either the .NET Framework 3.5 or the .NET
Framework 4 selections, and Rhino will be happy again.
2)
Add the reference to the third-party
DLL (Rhino.Mocks.dll) into the project and ignore the warning by clicking
"Yes".
3)
Click on the project reference and in
the property window modify the "Specific Version" of Rhino.Mocks to
"True".
4)
Right click on the project node and
select "Edit Your Project Name Here".
After the line starting
with
<Reference Include="Rhino.Mocks, ...">, add the following line: <SpecificVersion>True</SpecificVersion>
5) Reload and rebuild the project.
(Using VS 2010)