03 August 2013

Rhino Mocks

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)

No comments: