2011-01-24 7 views
14

У меня по существу та же проблема, что и вопрос, связанный ниже, но я не могу заставить его работать. Я получаю "не может применить индексирование [] к выражению типа System.Data.DataRow". Насколько я могу судить, я правильно реализовал решение.Тестирование, управляемое данными в MSTest - проблема с TestContext.DataRow

Problems with data driven testing in MSTest

[TestClass] 
public class UnitTest1 
{ 
    private TestContext testContextInstance; 

    public TestContext TestContext 
    { 
     get 
     { 
      return testContextInstance; 
     } 
     set 
     { 
      testContextInstance = value; 
     } 
    }   

    private ServiceReference1.ProductCatalogClient client = new ServiceReference1.ProductCatalogClient("BasicHttpBinding_IProductCatalog"); 

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\CountList.csv", "CountList#csv", DataAccessMethod.Sequential), DeploymentItem("..\\ServiceTest\\CountList.csv"), TestMethod] 
    public void AreCountsCorrect() 
    { 
     int id = TestContext.DataRow["Id"] as int; 
     int count = client.GetProductCount(id); 
     Assert.IsTrue(count == TestContext.DataRow["Count"] as int); 
    } 
} 
+2

Обнаружена моя проблема: необходимо добавить ссылку на System.Data в моем тестовом проекте. – bq1990

ответ

17

Добавить ссылку на System.Data в тестовом проекте. Не знаю, почему это не будет автоматически включаться, поскольку DataRow используется для испытаний, управляемых данными.

0

это один работает со мной

[TestMethod] 
    [TestCategory("Category 4")] 
    [DataSource("MyExcelDataSource")] 
    [DeploymentItem("UnitTestProject\\DBConnections.xlsx")] 
    public void testwithexceldata() 
    { 
     //http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.testcontext.datarow.aspx 

     int x = TestContext.DataRow.Table.Rows.Count; 
     int Balance = Convert.ToInt32(TestContext.DataRow["Balance"]); 
     int Amount = Convert.ToInt32(TestContext.DataRow["Amount"]); 
     Assert.AreEqual(Balance, Amount); 

}

1

У меня была такая же проблема, как вы с this.TestContext.DataRow [ «PathFile_Original»], , что я делаю неправильно было так простой, я не добавил ссылку на System.Data, вот и все.

Это довольно легко исправить, убедитесь, что у вас уже есть библиотека.

Приветствия

5

Вы должны добавить ссылку на тестовый проект, чтобы устранить эту проблему. Я не знаю, почему VS2013 не добавляет его автоматически.

щелкните правой кнопкой мыши ваш тестовый проект, Add-> Reference ...-> Assemblies-> Framework-> System.Data, проверьте его.

Выполнено!

enter image description here

1

Чтобы устранить проблему, как уже говорили другие, вы должны добавить ссылку на System.Data в вашем проекте.

Если у вас все еще есть проблема после добавления этой ссылки, возможно, вам придется перезапустить Visual Studio и удалить любые избыточные ссылки или using.

+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). –

+0

Спасибо, Боб. Я отредактировал свой ответ так, чтобы он читал как ответ на вопрос. – Frakur