编写NUnit测试代码

Syn*_*ter 0 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;
}
Run Code Online (Sandbox Code Playgroud)

Gis*_*shu 9

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

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

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

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

  1. 安排:创建已知输入(int I,字符串S,带有一些"testData"=> Y的哈希表)
  2. Act:调用方法并获取结果数据集
  3. 断言:查询数据集以查看它是否具有包含2条记录的单个表.检查表记录的内容,看它们是否包含标题行和包含[I,S,Y]的行.

测试#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"])
}
Run Code Online (Sandbox Code Playgroud)

我建议你在C#中使用NUnit或者从列表中获取一本像Pragmatic Unit Testing这样的好书,以加快你的速度.