Как получить значения параметров из тестового примера для azure devops (прежние vsts) в тестах C #? - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь получить значения параметров, определенные в тестовом примере в DevOps Azure (ранее VSTS).Мой тестовый пример выглядит так - Azure devops test *

Я пытаюсь получить значения в методе теста, который выглядит следующим образом -

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase",
  "https://[companyName].visualstudio.com;[projectName]", 
  "5843", // this is the test case number 
  DataAccessMethod.Sequential), 
  TestMethod]
public void DataOverlapsBottomRowOfFilterFromTestParameter()
{

  string column1 = TestContext.DataRow[0].ToString(); // read parameter by column index
  string column2 = TestContext.DataRow["Column2"].ToString(); //read parameter by column name 

// rest of the code

}

Во время работыэтот тест он даже не входит в код метода теста.Это выдает эту ошибку -

Адаптер модульного теста не смог подключиться к источнику данных или прочитать данные.Дополнительные сведения об устранении неполадок, связанных с этой ошибкой, см. В разделе «Устранение неполадок, связанных с модульными тестами, управляемыми данными» (http://go.microsoft.com/fwlink/?LinkId=62412) в библиотеке MSDN. Сведения об ошибке: невозможно найти запрошенный поставщик данных .Net Framework. Возможно, он не установлен.

Ошибка метода теста

Пожалуйста, кто-нибудь может указать мне, что мне здесь не хватает? Я следовал документации по Data-Driven Unit Test. Но я чувствую, что могу бытьпропустить что-то, что может заставить его работать. Спасибо!

1 Ответ

0 голосов
/ 27 декабря 2018

Я отвечаю на свой вопрос.Я получил его, используя пространства имен Microsoft.TeamFoundation.WorkItemTracking.WebApi, Microsoft.VisualStudio.Services.Common и Microsoft.VisualStudio.Services.WebApi.

Код выглядит так

[TestMethod]
[WorkItem(1111)]
public void GetTestValuesFromTestParameter()
{
  //This test is for continuous range 

  var method = MethodBase.GetCurrentMethod();
  var attr = (WorkItemAttribute)method.GetCustomAttributes(typeof(WorkItemAttribute), true)[0];
  var workItemId = attr.Id;
  var dataTable = GetTableItemsFromTestCase(workItemId);
  foreach (DataRow dataRow in dataTable.Rows)
  {
    //Rest of the code
  }
}

GetTableItemsFromTestCase метод -

private DataTable GetTableItemsFromTestCase(int workItemId)
{
  var accountUri = new Uri("");     // Account URL, for example: https://fabrikam.visualstudio.com                
  var personalAccessToken = ";  // See https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/pats?view=vsts              

  // Create a connection to the account
  var connection = new VssConnection(accountUri, new VssBasicCredential(string.Empty, personalAccessToken));

  // Get an instance of the work item tracking client
  var witClient = connection.GetClient<WorkItemTrackingHttpClient>();

  IEnumerable<XElement> descendants = new List<XElement>();
  var dt = new DataTable();
  try
  {
    // Get the specified work item
    var workitem = witClient.GetWorkItemAsync(workItemId).Result;

    var itemParams = workitem.Fields["Microsoft.VSTS.TCM.Parameters"];
    var itemParamsElement = XElement.Parse((string)itemParams);

    var paramDataSource = workitem.Fields["Microsoft.VSTS.TCM.LocalDataSource"];
    var xElement = XElement.Parse(paramDataSource.ToString());

    //Assuming we have a table named "Table1" in the workitem
    descendants = xElement.Descendants("Table1");

    foreach (var xe in itemParamsElement.Descendants("param"))
    {
      var name = xe.Attribute("name").Value;
      dt.Columns.Add(name, typeof(string));
    }
    foreach (var descendant in descendants)
    {
      var r = dt.NewRow();
      foreach (var xe in descendant.Descendants())
      {
        r[xe.Name.LocalName] = xe.Value;
      }
      dt.Rows.Add(r);
    }
  }
  catch (AggregateException aex)
  {
    VssServiceException vssex = aex.InnerException as VssServiceException;
    if (vssex != null)
    {
      //log error
    }
  }

Надеюсь, это поможет другим.Получил помощь по этой ссылке для аутентификации

https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/pats?view=vsts

...