2010-12-14 24 views
12

Je suis Unité Test d'une de mes fonctions. Voici mon code:Ajout d'un simulacre de données dans les tests unitaires

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

} 

Maintenant j'obtiens une erreur: La colonne 'Nom' n'appartient pas à la table. Comme vous pouvez le voir, j'ai spécifié le nom de la colonne "Nom" ici et ajouté cette ligne particulière. Alors pourquoi je reçois cette erreur? De l'aide?

Merci!

Répondre

14

Vous n'avez pas configuré vos colonnes (sauf si vous avez manqué du code dans votre exemple).

Vous devez créer les colonnes avec les noms requis avant de pouvoir y accéder comme ceci:

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

Lorsque vous lisez les données de la base de données si vous avez défini AutoGenerateColumns true (la valeur par défaut) vous n Pas besoin de le faire explicitement, comme c'est fait pour vous dans les coulisses.

+0

uuummm ... Je pense que j'utilise le même code. –

+0

C'est ici que je crée les colonnes: 'DataRow mydatarow; mydatarow = table.NewRow(); // Etape 2: Ajouter la ligne comme les données réelles! mydatarow ["Name"] = "Test"; mydatarow ["Adresse"] = "00000 ST."; mydatarow ["ZipCode"] = "77665"; mydatarow ["Tracking #"] = ""; ' –

+0

Ici, les noms des colonnes sont: Nom, Adresse, Code postal et Numéro de suivi. –