如何编写以下方法的代码,以便在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;
}
答案 0 :(得分:9)
首先要问的问题是:为什么我需要写这个方法?它为我做了什么?
为该方法提供更人性化的名称。 从我所看到的,该方法接受一个整数,一个字符串和一个哈希表。然后期望该方法返回包含具有3列的单独表的数据集
测试此方法应该是微不足道的, 试验#1:
测试#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列表中的一本好书来获取像语用单元测试这样的好书,以加快你的速度。