SyncMaster
SyncMaster

Reputation: 9936

Writing NUnit test code

How can I write code for the below method so that it can be tested in NUnit? How to handle a Hashtable?

public DataSet MySampleMethod(int param1, string param2, Hashtable ht)
{
    if(ht==null)
    {
        ht = new Hashtable();
    }
    ht.Add("testKey","testData");

    DataSet ds = new DataSet();
    ds.Tables.Add();
    ds.Tables[0].Columns.Add("Column1");
    ds.Tables[0].Columns.Add("Column2");
    ds.Tables[0].Columns.Add("Column3");

    DataRow dr = ds.Tables[0].NewRow();
    dr["Column1"] = "My column 1";
    dr["Column2"] = "My column 2";
    dr["Column3"] = "My column 3";
    ds.Tables[0].Rows.Add(dr);

    DataRow dr1 = ds.Tables[0].NewRow();
    dr1["Column1"] = param1.ToString();
    dr1["Column2"] = param2;
    dr1["Column3"] = ht["testKey"].ToString();
    ds.Tables[0].Rows.Add(dr1);

    return ds;
}

Upvotes: 0

Views: 2511

Answers (1)

Gishu
Gishu

Reputation: 136633

First question to ask is: Why do I need to write this method? What's it doing for me?

Give the method a more human-friendly name. From what I can see, the method takes in an integer, a string and a hashtable. The method is then expected to return a dataset containing a solitary table with 3 columns,

  • the first row contains values like {"My Column {ColumnNo}"..}
  • the second row of which contains the [ intParam.ToString(), stringParam, hashtable["testKey"] ]

Testing this method should be trivial, Test#1:

  1. Arrange : Create known inputs (an int I , string S, a hashtable with some "testData"=> Y)
  2. Act : Call the method and obtain the resulting dataset
  3. Assert : Query the dataset to see if it has the single table with 2 records. Inspect the contents of the records of the table to see if they contain the header row and the row with [I, S, Y].

Test#2: Similar to above test, except that you pass in null for the hashtable parameter.

That's all I could see based on the snippet you posted. HTH

Update: Not sure what you mean here by "handle hashtable" or "write test fixture code for hashtable" ? The hashtable is just a parameter to your function.. so I reckon the test would look something like this (Forgive the bad naming and lack of constants... can't name them unless I know what this function is used for in real life)

[Test]
public void Test_NeedsABetterName()
{
  int intVal = 101; string stringVal = "MyString"; string expectedHashValue = "expectedValue";
  Hashtable ht = new Hashtable();
  ht.Add("testKey", expectedHashValue);

  Dataset ds = MySampleMethod(intVal, stringVal, ht);

  Assert.AreEqual(1, ds.Tables.Count);
  Assert.AreEqual(2, ds.Tables[0].Rows.Count);
  // check header Row1.. similar to Row2 as shown below
  DataRow row2 = ds.Tables[0].Rows[1];
  Assert.AreEqual(intVal.ToString(), row2["Column1"]);
  Assert.AreEqual(stringVal,         row2["Column2"]);
  Assert.AreEqual(expectedHashValue, row2["Column3"])
}

I'd recommend getting a good book like Pragmatic Unit Testing in C# with NUnit or one from the list here to speed you up here.

Upvotes: 9

Related Questions