Работа атрибута DataSource в #

225
05 мая 2017, 15:15

Не могу найти хорошего объяснения работы атрибута [DataSource]. Везде работа с таблицами. А если я хочу просто туда загрузить пару переменных без таблиц, то как быть? и как к этим переменным обращаться в самом [TestMetod]?

Answer 1

Назначение атрибута [DataSource] — получать информацию именно из таблиц. ВЫ описываете ваши табличные данные в этом атрибуте, в результате ваш тестовый метод будет вызван по разу для каждой из строк таблицы.

Для того, чтобы получить доступ к информации из вашей строки таблицы внутри теста, нужно в тестовом классе использовать свойство TestContext, и в нём обращаться к DataRow.

Пример:

[TestClass]
public class UnitTest04052017
{
    // convention: needed to get the data for data-driven test
    public TestContext TestContext { get; set; }
    [TestMethod]
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", 
                SubDir + @"\Tests.csv", @"Tests#csv", DataAccessMethod.Sequential)]
    public void TestingAlphaCentauriDistance()
    {
        var coordX = (double)TestContext.DataRow[0];
        var coordY = (double)TestContext.DataRow[1];
        var expected = (double)TestContext.DataRow[2];
        var dx = coordX - 77777;
        var dy = coordX - 99999;
        var distance = Math.Sqrt(dx * dx + dy * dy);
        DoubleAssert.AreClose(distance, expected, eps);
    }
}

Если вы хотите воспользоваться просто конкретным набором значений, вам нужно разрефакторить ваш тест, чтобы он принимал значения на вход:

[TestClass]
public class UnitTest04052017
{
    // convention: needed to get the data for data-driven test
    public TestContext TestContext { get; set; }
    [TestMethod]
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", 
                SubDir + @"\Tests.csv", @"Tests#csv", DataAccessMethod.Sequential)]
    public void TestingAlphaCentauriDistance()
    {
        var coordX = (double)TestContext.DataRow[0];
        var coordY = (double)TestContext.DataRow[1];
        var expected = (double)TestContext.DataRow[2];
        TestMain(coordX, coordY, expected);
    }
    [TestMethod]
    public void TestingRandomDistance()
    {
        TestMain(1, 2, 300);
        TestMain(2, 1, 400);
    }
    void TestMain(double coordX, double coordY, double expected)
    {
        var dx = coordX - 77777;
        var dy = coordX - 99999;
        var distance = Math.Sqrt(dx * dx + dy * dy);
        DoubleAssert.AreClose(distance, expected, eps);
    }
}
Answer 2

С использованием mstest - никак нельзя сразу внести переменные без использования сторонних файлов. Обычно создают один файл .xlsx и в разных вкладках добавляют данные для разных тестов. В итоге получается один файл с данными для всех тестов, которые не перемешаны между собой.

READ ALSO
Выборка участка данных из БД

Выборка участка данных из БД

Есть проект использующий C#NET, Entity Framework

205
Как сделать запрос с Request Payload?

Как сделать запрос с Request Payload?

Скажите пожалуйста как на c# сделать Request Payload запрос? Я просто впервые за всю жизнь встретил такой тип запроса :(

246
Событие при выборе элемента из списка combobox WPF

Событие при выборе элемента из списка combobox WPF

Есть комбобокс на WPFВ боксе несколько значений нужно что бы при выборе одного запускался один метод а при выборе другого значения - соответственно...

600
Получение тела запроса в asp web api

Получение тела запроса в asp web api

Привет всем, столкнулся с проблемой следующего характера

217