2010-12-14 15 views
12

I Am Unit Test di una delle mie funzioni. Ecco il mio codice:Aggiunta di una simulazione Datatable in Unit Test

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")); 
    } 

} 

Ora sto ricevendo un errore: colonna 'Nome' non appartiene alla tabella. Come puoi vedere ho specificato il nome della colonna "Nome" qui e ho aggiunto anche quella particolare riga. Allora perché sto ottenendo questo errore? Qualsiasi aiuto?

Grazie!

risposta

14

Non hai impostato le tue colonne (a meno che tu non abbia perso del codice nell'esempio).

È necessario creare le colonne con i nomi richiesti prima di potervi accedere in questo modo:

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

Quando si leggono i dati dal database se hai impostato AutoGenerateColumns su true (il valore predefinito) don Non c'è bisogno di farlo in modo esplicito come è fatto per te dietro le quinte.

+0

uuummm ... Penso di usare lo stesso codice. –

+0

Qui è dove sto creando le colonne: 'DataRow mydatarow; mydatarow = table.NewRow(); // Passaggio 2: aggiungere la riga come i dati reali! mydatarow ["Name"] = "Test"; mydatarow ["Indirizzo"] = "00000 ST."; mydatarow ["ZipCode"] = "77665"; mydatarow ["Tracking #"] = ""; ' –

+0

qui i nomi delle colonne sono: Name, Address, ZipCode e Tracking #. –