Thursday, August 30, 2007

Unit testing in .NET

NUnit: Unit testing framework for .NET

I had only theoretical knowledge about the unit testing until I came across NUnit. Later I've realized that NUnit can make a huge impact in the quality of the code as well as the project and how helpful it is for a .NET developer. Its very hard to maintain huge chunks of code and it will become real difficult to keep track of changes in a huge project. NUnit will come into picture here.
TDD (Test driven development) and extreme programming:
According to Aslam : "you have a requirement, you will start writing test code for the requirement before writing the actual code, obviously test fails when trying to run the test because the actual code is missing , then you will start writing the actual code.This method is called as TDD."
isn't TDD crazy!!? :)
Let me conclude, Test driven development involves 3 stages,
1.write a test 2.write code to pass the test 3.refactor the code to make it simpler and flexible

When TDD is getting used? Suppose the changes in requirement is so frequent and thus it results an overhead for the developer to keep track of the changes in code. TDD is a solution for the above mentioned problem.
And the only way to understand TDD is to do it.
TDD(test driven development) is an extreme programming technique. There will be a corresponding test code for every functionality in the actual code. Now comes the question, how will you write the unit test code in .NET? And the answer is NUnit.
Here is a scenario on how to use NUnit.
1. Account.cs :
using System;
using System.Collections.Generic;
using System.Text;

namespace bank
{
public class Account
{
private float balance;
public void Deposit(float amount)
{
balance += amount;
}

public void Withdraw(float amount)
{
balance -= amount;
}

public void TransferFunds(Account destination, float amount)
{
}

public float Balance
{
get { return balance; }
}
}
}
2. AccountTest.cs : unit test for Account.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace bank
{
using NUnit.Framework;

[TestFixture]
public class AccountTest
{
[Test]
public void TransferFunds()
{
Console.Out.WriteLine("start testing...");
Console.Out.WriteLine("creating source object...");
Account source = new Account();
source.Deposit(200.00F);
Console.Out.WriteLine("creating destination object...");
Account destination = new Account();
destination.Deposit(150.00F);
Console.Out.WriteLine("transfer funds...");
source.TransferFunds(destination, 100.00F);
Assert.AreEqual(150.00F, destination.Balance);
Assert.AreEqual(200.00F, source.Balance);
Console.Out.WriteLine("end testing...");
}
}
}

3. Run the test (using GUI-Runner ie, nunit-gui.exe)



Here test is successful and thus indicating in green color.


Reference: http://www.nunit.org/


And
NUnit was my first work in IBM, and Thanks to Aslam(TPM) for
giving me the opportunity to dig into NUnit. And later my learnings are
recognized and added as an IBM asset in code library!! :)

5 comments:

Gauri Chandran said...

Nid u rocks....enikku venda kaaryangal thanne aanallo nee blogil eyuthunne...[:)]

Arun said...

Write a post on OOPs...most frequent qns and ..how oops is used in real projects..some simple exaples..

nidhish said...

Gauri and Appy, u ppl can always ping me if u r facing any issue with NUnit. I will also try to jump into the same when i am free.

prati said...

real helpful one nidz...

Victor said...

Hi Nidhish,
Thanks for your tips in NUnit. This is really helpful for us. We expect some more blogs in different areas of .NET so that we can shape us well.