【问题标题】:In unit testing how to pass input for hash table在单元测试中如何传递哈希表的输入
【发布时间】:2009-04-07 10:22:38
【问题描述】:
   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 当一个方法返回一个 Dataset 时该怎么做

【问题讨论】:

  • 这能回答你的问题吗?

标签: c# unit-testing nunit


【解决方案1】:

您可以使用虚拟数据在 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" );
}

我可以看到你真正的问题是关于返回的数据集的断言。 您仍然可以使用 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() );
}

希望能回答你的问题。

【讨论】:

  • 你能不能再详细点。由于哈希表是集合,因此它是否是对其进行单元测试的正确方法
  • 这个方法正在返回一个数据集,所以我应该如何比较预期结果和结果,例如如果返回类型是 int AREequals.(5,add(2,3)) 我可以像这样验证
  • 这能回答你的问题吗?
  • 是的,但我实际上是在以编程方式生成这些代码,所以有没有通用的方法来做到这一点
  • 您必须更具体一些,您如何生成以及生成什么代码?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2018-11-02
    相关资源
    最近更新 更多