Pieter Brinkman Blog

TypeMock: Mock Unittest examples

3 min readpieterASP.NetexampleTypemockunittest

In this example I will show how to create a Unit Test with TypeMock. First I have created some basic dummy classes for the example

public sealed class ServiceFactory {
    public static ExpireDateService CreateExpireDateService()     {
        ExpireDateService expireDateService = new ExpireDateService();
        expireDateService.administration = new SqlAdministration("connectionstring");
        return expireDateService;
    }
} /// /// SqlAdministrion creates connection and managed queries with SQL /// public class SqlAdministration {
    private static DateTime LoadParameterPrivate()     {
        return DateTime.Parse("01-01-1980");
    }
    public SqlAdministration(string connectionString)     {
        //Create connection to sql�     }
    public static DateTime LoadParameter(string expireDateType)     {
        //GET expireDate from Database:          SqlAdministratie.LoadParameter("expireDateType");
        // Load Date from Private method for other mocking examples
        return LoadParameterPrivate();
    }
} public class ExpireDateService {
    public SqlAdministration administration;
    public DateTime GetDate(string expireDateType)     {
        DateTime expireDate = SqlAdministration.LoadParameter(expireDateType);
        return expireDate;
    }
} public class CheckDate {
    public static bool CheckExpireDateBooking()     {
        ExpireDateService expireDateService = ServiceFactory.CreateExpireDateService();
        DateTime expireDate = expireDateService.GetDate("expireDateDateFirst");
        return DateTime.Parse("01-01-2000") < expireDate;
    }
}

With the following Unit test I will test the code written above. I don't want to change my code or add code for testing purpose. That's where Mocking comes in. With TypeMock I will mock the outcome of specified methods. The first example is a standard unit test. No Mocking there.

/// /// Checks the expiredate from 'database' 01-01-1980 /// with a hardcoded date 01-01-2000 /// \[TestMethod()\] public void TestMethodWithoutTypeMock() {
    Assert.IsFalse(CheckDate.CheckExpireDateBooking());
}

 Now I want to mock the method GetDate to return a date specified by me (01-01-2010).

/// /// Checks the expiredate from database (01-01-1980) /// with a hardcoded date provided by TypeMock (01-01-2010) /// \[Isolated\] \[TestMethod()\] public void TestMethodWithTypeMockIsolate() {
    //Create a dummy version of the ExpireDateService object to use for Mocking     ExpireDateService expireDateService = new ExpireDateService();
    expireDateService.administration = new SqlAdministration("dummyConnectionString");
    //Return the declared expireDateService when method CreateExpireDateService is called     Isolate.WhenCalled(() => ServiceFactory.CreateExpireDateService())         .WillReturn(expireDateService);
    //Isolate the call to method expireDateService.GetDate with parameter 'expireDateDateFirst' and return 01-01-2010     Isolate.WhenCalled(() => expireDateService.GetDate("expireDateDateFirst"))         .WillReturn(DateTime.Parse("01-01-2010"));
    Assert.IsTrue(CheckDate.CheckExpireDateBooking());
}

For the latest example I wanted to Mock a Private method.

/// /// Checks the expiredate from database (01-01-1980) /// with a hardcoded date provided by TypeMock on privatemethod(01-01-2010) /// \[Isolated\] \[TestMethod()\] public void TestMethodWithTypeMockIsolatePrivate() {
    Isolate.NonPublic.WhenCalled(typeof(SqlAdministration), "LoadParameterPrivate")         .WillReturn(DateTime.Parse("01-01-2010"));
    Assert.IsTrue(CheckDate.CheckExpireDateBooking());
}

You can download the source here: MockingWithTypeMockExampleSource.zip (44.47 kb) Hope it helps. Cheers, Pieter