2010-12-14 23 views
12

我是单元测试我的一个函数。这里是我的代码:在单元测试中添加模拟数据表

public void TestLabels() 
{ 

    //Step 1: Creating a mock table with columns exactly like in the real table. 
    DataTable table = new DataTable(); 

    DataRow mydatarow; 
    mydatarow = table.NewRow(); 

    //Step 2: Adding the row as same as the Real Data! 

    mydatarow["Name"] = "Test"; 
    mydatarow["Address"] = "00000 ST."; 
    mydatarow["ZipCode"] = "77665"; 
    mydatarow["Tracking#"] = ""; 

    table.Rows.Add(mydatarow); 

    foreach (DataColumn column in table.Columns) 
    Console.WriteLine(column.ColumnName); 

    //Step 3: Call method we are testing. 
    var updateTable = IceTechUPSClient.Instance.CreateLabels(table); 

    foreach (DataRow row in updateTable.Rows) 
    { 
    var trackingNumber = row["Tracking#"].ToString(); 
    Assert.IsFalse(String.IsNullOrWhiteSpace(trackingNumber), "Expecting tracking number generated for every row!"); 
    Assert.IsTrue(File.Exists(trackingNumber + ".gif")); 
    } 

} 

现在我收到一个错误:列'名称'不属于表。正如你所看到的,我已经在这里指定了列名“Name”,并且还添加了特定的行。那为什么我得到这个错误?任何帮助?

谢谢!

回答

14

你还没有设置你的列(除非你在示例中遗漏了一些代码)。

您需要与所需的名称创建列之前,你可以像这样访问他们:当你读数据从数据库中,如果您设置AutoGenerateColumns为true(默认值)

var columnSpec = new DataColumn 
        { 
         DataType = typeof(string), 
         ColumnName = "Name" 
        }; 
this.table.Columns.Add(columnSpec); 

你不不需要明确地做到这一点,因为它是在幕后为您完成的。

+0

uuummm ...我想我使用相同的代码。 – 2010-12-14 21:00:48

+0

这是我创建列的地方:'DataRow mydatarow; mydatarow = table.NewRow(); //第2步:添加与真实数据相同的行! mydatarow [“Name”] =“测试”; mydatarow [“Address”] =“00000 ST。”; mydatarow [“ZipCode”] =“77665”; mydatarow [“Tracking#”] =“”;' – 2010-12-14 21:02:16

+0

这里的列名是:姓名,地址,ZipCode和Tracking#。 – 2010-12-14 21:02:51