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
[code language=’c#’]
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;
}
}
[/code]
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.
[code language='c#']
///
/// Checks the expiredate from ‘database’ 01-01-1980
/// with a hardcoded date 01-01-2000
///
[TestMethod()]
public void TestMethodWithoutTypeMock()
{
Assert.IsFalse(CheckDate.CheckExpireDateBooking());
}
[/code]
Now I want to mock the method GetDate to return a date specified by me (01-01-2010).
[code language=’c#’]
///
/// 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());
}
[/code]
For the latest example I wanted to Mock a Private method.
[code language=’c#’]
///
/// 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());
}
[/code]
You can download the source here:
MockingWithTypeMockExampleSource.zip (44.47 kb)
Hope it helps.
Cheers,
Pieter