TechBubbles

Test driven development using C#

This post explains how TDD can be implemented in C# using NUNIT.

You can read the Introduction TDD to get an idea on TDD.

Nunit is a open source framework to for .NET which helps you to automate the unit testing. Nunit can downloaded from the Nunit site. current version is 2.5.

Nunit provides two utilities for running the automated tests

  • nunit-gui.exe – GUI tool
  • nunit-console.exe – Command line tool

Using Nunit in Visual studio .NET Project

To implement the TDD we need to write

  1. Test cases
  2. program that is having test cases to run against it

Behavior of the Person C# class that we are going to write test cases

The Behavior can be described as follows

  • A Person has properties age,full name and cash balance.
  • When instantiating a person we should able to provide a first name, last name and age.
  • The person full name property should return first name and last name with a space in-between.
  • When you are creating person object cash balance should be 20000.
  • The cash balance should be reduced by the amount he with draws.

From the Above behavior we can formulate a number of test cases example

  • If we create a person with first and last name of “Kalyan” and “Bandarupalli” , and age 27, the person’s full name should not be ” Kalyan Hero”.
  • The person full name should be “Kalyan Bandarupalli”.
  • The person’s age should be 27.
  • Before withdrawing money the person’s cash balance should be 20000.
  • After withdrawing 10000 cash, the person’s cash balance should be 10000.

We can implement the above test case in code[C#] using Nunit. To create a test case in your application create a class having the [TextFixture] attribute.

This class will contain test to test the methods,operations and values in    Person   class.

When you add the [TextFixture] attribute it means that class can have testcases to run under Nunit

Sample class the contains the above test case methods

using NUnit.Framework;

[TestFixture]
public class PersonTestClass
{
    Person pTest;
    public PersonTestClass()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    [SetUp]  // This method will executed before any other test method executes
    public void Init()
    {
        pTest = new Person("Kalyan", "Bandarupalli", 27);
    }

    [Test] //Telling Nunit it is testable method
    public void IsNameKalyanBandarupalli()
    {
        Assert.IsTrue("Kalyan Bandarupalli" == pTest.FullName);
    }

    [Test] //Telling Nunit it is testable method

    public void IsAgeEqual()
    {
        Assert.AreEqual(27, pTest.Age);
    }

    [Test] //Telling Nunit it is testable method
    public void BalanceBeforeWithDraw()
    {
        Assert.AreEqual(20000, pTest.CashBalance);
    }

    [Test] //Telling Nunit it is testable method
    public void BalanceAfterWithDraw()
    {
        pTest.WithDraw(10000);
        Assert.AreEqual(10000, pTest.CashBalance);
    }
}

//Person Class

 class Person
    {
        //Variable Declarations
        string strFName;
        string strLName;
        int iAge;
        float fcash;

        Person()
        {
            strFName = "";
            strLName = "";
            iAge = 0;
            fcash = 0;
        }
        public Person(string pstrFName, string pstrLName, int piAge)
        {
            strFName = pstrFName;
            strLName = pstrLName;
            iAge = piAge;
            fcash = 20000;
        }
        public int Age
        {
            get { return iAge; }
        }
        public string FullName
        {
            get { return strFName + " " + strLName; }
        }
        public float CashBalance
        {
            get { return fcash; }
        }
        public void WithDraw(float fCost)
        {
            fcash = fcash - fCost;
        }

    }
}

Build the assembly and run the test cases using Nunit

To do this launch the Nunit GUI tool , go to the File menu and select open. Next browse the assembly which we created above. This will then load the test cases in the Nunit-Gui tool, we can click Run button to begin the test cases. All test cases should pass as shown in the screen shot below.

nunit 

Conclusion: In this post we had a look at TDD,unit testing and Nunit to implement the testcases.Unit testing here we discussed is for  class libraries that developed using C#. It does not designed to test UI elements of the ASP.NET application. There is a tool named NunitASP designed to write unit test cases for ASP.NET application.

No comments yet. Be the first.

Leave a reply