在单元测试中如何传递哈希表的输入

时间:2009-04-07 10:22:39

标签: c# unit-testing nunit

   public DataSet ExampleMethod(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");
    return ds ;


    } 

这只是一个示例方法,因为我有一个字符串,一个int和一个哈希表类型作为输入,我可以传递int和string的随机值但是我将为哈希表类型传递什么类型的值单元测试这种方法。我还想为这个方法提供一个示例Nunit Fixture代码,以便我可以在Nunit框架中测试它。因为我的方法返回一个数据集,我如何为它编写文本夹具,因为我使用AREequals。(5,add(2,3) ))如果它返回一个int .so当一个方法返回一个数据集

时该怎么做

2 个答案:

答案 0 :(得分:0)

您可以在TestMethod或TestFixture中使用虚拟数据创建HashTable并传递该对象。我理解你了吗?

在[SetUp]方法中,使用虚拟数据填充HashTable。

Hashtable ht = new Hashtable();

[SetUp]
public void SetUp()
{
   ht.Add( "key1", "value1" );
   ht.Add( "key2", "value2" );
   ht.Add( "key3", "value3" );
}

我可以看到你真正的问题是关于返回的DataSet的Assert。 你仍然可以使用Assert.AreEqual,而是测试DataSet包含你给HashTable所期望的单元格数据。

Assert.AreEqual( ht["key1"], ds.Tables[0].Rows[0][0].ToString() );
Assert.AreEqual( ht["key1"], ds.Tables[0].Rows[0][1].ToString() );

你可以使用循环。

你的TestMethod看起来像这样。

[Test]
public void Should_Do_Stuff()
{
    MyClass myObject = new MyClass();

    DataSet ds = myObject.ExampleMethod( 1, "string", ht );

    Assert.AreEqual( ds.Tables[0].Rows.Count, ht.Count );
    Assert.AreEqual( ht["key1"], ds.Tables[0].Rows[0][0].ToString() );
    Assert.AreEqual( ht["key1"], ds.Tables[0].Rows[0][1].ToString() );
}

希望能回答你的问题。

答案 1 :(得分:0)

传递null或使用静态数据创建新的哈希表并将其传递给此函数。对于检查数据集,您可以在返回的数据集计数上断言,是否为null,如果需要也可以为值。