Comments disabled

I disabled the comments because of the huge amounts of spam I’m receiving. So if you have any questions you can contact me trough linked-in.

Sorry for the inconvenience.

TypeMock: Mock Unittest examples

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;
    }
}

/// <summary>
/// SqlAdministrion creates connection and managed queries with SQL
/// </summary>

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") &lt; 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.

[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).


/// <summary>
/// Checks the expiredate from database (01-01-1980)
/// with a hardcoded date provided by TypeMock (01-01-2010)
/// </summary>

[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(() =&gt; ServiceFactory.CreateExpireDateService())
        .WillReturn(expireDateService);

    //Isolate the call to method expireDateService.GetDate with parameter 'expireDateDateFirst' and return 01-01-2010

    Isolate.WhenCalled(() =&gt; expireDateService.GetDate("expireDateDateFirst"))
        .WillReturn(DateTime.Parse("01-01-2010"));

    Assert.IsTrue(CheckDate.CheckExpireDateBooking());
}


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


/// <summary>
/// Checks the expiredate from database (01-01-1980)
/// with a hardcoded date provided by TypeMock on privatemethod(01-01-2010)
/// </summary>

[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

Realization corporate website hu.nl

For Evident Interactive I was Lead-developer on the hu.nl project. With a team of 5 professionals we build 23 websites in 5 months. All the websites where implemented within one instance of Sitecore CMS.

The websites containing Flash, Silverlight, GoogleMaps, Flick and Youtube.

The project was successfully realized within the deadline.

TSQL: Nested Select with multiple results to one (comma separated) string

For this example I will use the default asp.net Membership tables.

Let say: I need to return all users with their roles (comma separated) in one query. After a long time Googling I found the following solution.



select
  UserName,
  (select roles.RoleName + ', '
    FROM aspnet_Roles roles
    join aspnet_UsersInRoles usersInRole on roles.RoleId = usersInRole.RoleId
    WHERE usersInRole.UserId = aspUser.UserId
    for xml path('')) as roles
from
    aspnet_Users aspUser


Don’t know if this is the best way, but it works.

TSQL: Use common table expression

With common table expressions you can save the results to a temporary result set and use this results set for other queries.


WITH temporaryNamedResultSet
AS
(
  select UserName from aspnet_Users
)
select * from temporaryNamedResultSet


Asp.Net: invoke WCF method with WCF Test Client

When deploying a Silverlight application we ran into problems a WCF web-service, to find out what the problem was I wanted to invoke the method.

Microsoft shipped an application for invoking methods from your Windows PC (WCFtestclient.exe). The following steps explain how to use WCFtestclient.exe.

First startup Visual Studio 2008 Command Prompt. In the command prompt type wcftestclient, the application will startup.

Now we need to add the Service. Click File and Add Service.

 

Add the URL to your service in the pop-up and pres ok. The service will now add all methods from your service. You can add multiple service URLs.

Double click the method you want to invoke from the tree on the left pane. Enter the values that are required for the Invoke and press Invoke. The method will be invoked.

The right bottom pane will show the response. In my case this shows the Stack-trace because of the error. Normally this will show the web-service response (XML).

With the stack-trace I could located the error and fix it.

Hope this helps,

Pieter