Добавление макета Datatable в модульное тестирование - PullRequest
14 голосов
/ 14 декабря 2010

Я являюсь модульным тестированием одной из моих функций. Вот мой код:

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

}

Теперь я получаю сообщение об ошибке: столбец «Имя» не принадлежит таблице. Как вы можете видеть, я указал здесь имя столбца «Имя», а также добавил эту строку. Тогда почему я получаю эту ошибку? Любая помощь?

Спасибо!

1 Ответ

16 голосов
/ 14 декабря 2010

Вы не настроили свои столбцы (если вы не пропустили некоторый код в вашем примере).

Вам необходимо создать столбцы с необходимыми именами, прежде чем вы сможете получить к ним доступ, например так:

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

Когда вы читаете данные из базы данных, если вы установили для AutoGenerateColumns значение true (по умолчанию), вам не нужно делать это явно, поскольку это делается для вас за кадром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...