Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试中如何传递哈希表的输入_C#_Unit Testing_Nunit - Fatal编程技术网

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

C# 单元测试中如何传递哈希表的输入,c#,unit-testing,nunit,C#,Unit Testing,Nunit,这只是一个示例方法,因为我有一个字符串、一个int和一个哈希表类型作为输入,我可以为int和string传递随机值,但是为了单元测试这个方法,我将为哈希表类型传递什么类型的值。我还想为这个方法提供一个Nunit Fixture代码示例,这样我就可以在Nunit框架中测试它。由于我的方法返回一个数据集,我如何为它编写一个文本Fixture,因为我使用了arequals。(5,add(2,3))如果它返回一个int。那么当方法返回一个数据集时,该怎么办呢?您可以在TestMethod或TestFix

这只是一个示例方法,因为我有一个字符串、一个int和一个哈希表类型作为输入,我可以为int和string传递随机值,但是为了单元测试这个方法,我将为哈希表类型传递什么类型的值。我还想为这个方法提供一个Nunit Fixture代码示例,这样我就可以在Nunit框架中测试它。由于我的方法返回一个数据集,我如何为它编写一个文本Fixture,因为我使用了arequals。(5,add(2,3))如果它返回一个int。那么当方法返回一个数据集时,该怎么办呢?您可以在TestMethod或TestFixture中用伪数据创建一个哈希表并传递该对象。我理解你的意思对吗

在[SetUp]方法中,用伪数据填充哈希表

   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 ;


    } 
我可以看出,真正的问题是关于返回数据集的断言。 您仍然可以使用Assert.AreEqual,但可以测试数据集是否包含给定哈希表所需的单元格数据

Hashtable ht = new Hashtable();

[SetUp]
public void SetUp()
{
   ht.Add( "key1", "value1" );
   ht.Add( "key2", "value2" );
   ht.Add( "key3", "value3" );
}
你可以用一个循环来做这个

您的测试方法可能如下所示

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

希望这回答了您的问题。

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

可以更详细地说明一下。因为哈希表是集合,所以它是单元测试的正确方法吗?这个方法返回一个数据集,所以我应该如何比较预期结果和结果,例如,如果返回类型是int arequals。(5,add(2,3))我可以这样验证这是否回答了你的问题?是的,但我实际上是通过编程生成这些代码的,所以有一种通用的方法来实现吗?你必须更加具体,你是如何生成代码的,生成的代码是什么?这是否回答了你的问题?
[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() );
}