编写NUnit测试代码

时间:2009-04-07 05:31:58

标签: nunit

如何编写以下方法的代码,以便在NUnit中进行测试?如何处理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;
}

1 个答案:

答案 0 :(得分:9)

首先要问的问题是:为什么我需要写这个方法?它为我做了什么?

为该方法提供更人性化的名称。 从我所看到的,该方法接受一个整数,一个字符串和一个哈希表。然后期望该方法返回包含具有3列的单独表的数据集

  • 第一行包含{{My Column {ColumnNo}“..}
  • 等值
  • 其中第二行包含[intParam.ToString(),stringParam,hashtable [“testKey”]]

测试此方法应该是微不足道的, 试验#1:

  1. 安排:创建已知输入(int I,字符串S,带有一些“testData”=> Y的哈希表)
  2. 法案:调用方法并获取结果数据集
  3. 断言:查询数据集以查看它是否具有包含2条记录的单个表。检查表记录的内容,看它们是否包含标题行和[I,S,Y]行。
  4. 测试#2: 与上面的测试类似,只是为hashtable参数传入null。

    根据您发布的代码段,我可以看到这一切。 HTH

    更新:通过“处理哈希表”或“为哈希表编写测试夹具代码”,不确定这里的含义是什么意思?哈希表只是你函数的一个参数..所以我认为测试会看起来像这样(原谅错误的命名和缺少常量......除非我知道这个功能在现实生活中用于什么,否则不能命名它们)

    [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"])
    }
    

    我建议在C#中使用NUnit或here列表中的一本好书来获取像语用单元测试这样的好书,以加快你的速度。