29 October 2008

CSV у якості DataSource

Для Data-Driven тестів я завжди використовував Excel, легко редагувати, легко під’єднати, тощо. Десь з тиждень назад розпочалась нова ера мого життя ;), мій дев лід вказав на старе як мир правило.

Будь який код повинен версіонуватися!

Все просто. По-перше, в тексті найменша зміна яка піддається діфам та мержам це один символ. В бінарному файлі, тільки сам файл. По-друге, для Data-Driven тестів, Дата це код.

Ну і добре! Принаймні два рішення. Перше це XML, а друге CSV. XML я одразу відкинув, купа сміття усі ті теги та атрибути. Для табулярних даних це просто оверкіл. Отже CSV.

Головне правило для роботи з MSTest Data-Driven тестами.

Якщо тест каже піти подивитись Troubleshooting Data-Driven Unit Tests, це треба зробити.

Наприклад я ніколи не читаю щось де є слово Troubleshooting. А тому я витратив декілька годин, на дебаггінг студії, ODBC провайдера, пошуку в інеті, тощо.

На сторінці Troubleshooting Data-Driven Unit Tests можна знайти нормальні рядки під’єднання, з деякими подробицями. Наприклад:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties="text;HDR=Yes;FMT=Delimited”

Tip    For the test.csv file, use test#csv as the table name.

Note   HDR=Yes means that the first row contains column names, not actual data.

Отже правила.

1) Крапка в назві файлу повинна бути замінена на “#”. Інше рішення це зовсім прибрати розширення, але реальний файл тоді повинен мати розширення “.txt”.

2) CSV файли повинні бути в окремій папці. Я на 100% не розумію проблему, але схоже що, з якогось переляку, драйвер перебирає усі файли, і валиться якщо йому щось не зрозуміло.

3) CSV файлу начхати на формат в якому ви туди щось запишете, але тести працювати не будуть якщо колонки не будуть текстовими. Я знаю два шляхи, якийсь там inf файл в директорію. Але це складно. Другий просто всі значення огортати лапками. Останнє стовідсотково працює.

Приклад тесту


[TestMethod]
[DataSource("System.Data.OleDb",
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\Data\\;Extended Properties=\"text;HDR=Yes;FMT=Delimited\"",
            "ValidPostalCodes#csv", DataAccessMethod.Sequential)]
[DeploymentItem("\\UnitTests\\Data\\ValidPostalCodes.csv", "Data")]
public void Validator_Should_Accept_Example_Postal_Code()

Приклад файлу


PostalCode,Comment
"1555-1899", "We allow dashes"
"184878848", "9 Digts is maximum"
"1", "1 digist is also valid postal code"

Помічено як: ,
 

Коментарі

# status_alexus said:

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

Вот мои аргументы в пользу XML :)

http://status-alexus.blogspot.com/2008/11/xml-datasource.html

09 November 08 at 8:31 AM
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.

About Mike Chaliy

Цікавлюсь DDD. Більшість часу витрачаю на доньку. А ще вел!