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