When you unit test, it is important to mock dependencies. You can use static mocks (which are really just dummy classes that implement your interface) or dynamic mocks which can save code some of the time. NMock is one of the frameworks for dynamic mocks. They work by creating a class instance at runtime to match your specifications. You take the instance of this class and use it like any other object. Below are several scenarios for using NMock to create runtime instances of an interface. This also works for abstract classes and concrete classes with virtual members.
1 using System;
2 using System.Security.Principal;
3 using NUnit.Framework;
4 using NMock;
5
6 [TestFixture]
7 public class NMockDemo
8 {
9 [Test, ExpectedException(typeof(VerifyException))]
10 public void FailsBecauseWrongThingWasPassedIn()
11 {
12 IMock mock = new DynamicMock(typeof(IPrincipal));
13 mock.ExpectAndReturn(“IsInRole”, true, “AdminRole”);
14
15 IPrincipal principal = (IPrincipal) mock.MockInstance;
16 bool result = principal.IsInRole(“TechRole”);
17
18 mock.Verify();
19 }
20
21 [Test, ExpectedException(typeof(VerifyException))]
22 public void FailsBecauseMethodWasntCalled()
23 {
24 IMock mock = new DynamicMock(typeof(IPrincipal));
25 mock.ExpectAndReturn(“IsInRole”, true, “AdminRole”);
26
27 IPrincipal principal = (IPrincipal) mock.MockInstance;
28
29 mock.Verify();
30 }
31
32 [Test]
33 public void Suceeds()
34 {
35 IMock mock = new DynamicMock(typeof(IPrincipal));
36 mock.ExpectAndReturn(“IsInRole”, true, “AdminRole”);
37
38 IPrincipal principal = (IPrincipal) mock.MockInstance;
39 bool result = principal.IsInRole(“AdminRole”);
40
41 mock.Verify();
42 }
43
44 [Test]
45 public void SetupResultThatCanBeCalledManyTimes()
46 {
47 IMock mock = new DynamicMock(typeof(IPrincipal));
48 mock.SetupResult(“IsInRole”, true, typeof(string));
49
50 IPrincipal principal = (IPrincipal) mock.MockInstance;
51
52 mock.Verify();
53 }
54
55 [Test]
56 public void HowToSetupMockPropertyWithNestedMock()
57 {
58 IMock mock = new DynamicMock(typeof(IPrincipal));
59 mock.SetupResult(“IsInRole”, true, typeof(string));
60
61 DynamicMock identityMock = new DynamicMock(typeof(IIdentity));
62 identityMock.SetupResult(“Name”, “someUserName”);
63 mock.SetupResult(“Identity”, identityMock.MockInstance);
64
65 IPrincipal principal = (IPrincipal) mock.MockInstance;
66 Console.WriteLine(principal.Identity.Name);
67
68 mock.Verify();
69 }
70 }