Как я могу ссылаться на встроенный файл данных для модульных тестов, управляемых данными? - PullRequest
5 голосов
/ 22 декабря 2009

Это мой сценарий, я хочу сделать модульное тестирование на основе данных, и для того, чтобы быть независимым от среды, я хочу встроить файл данных в мою сборку. Как я могу ссылаться тогда в DataSourceAttribute модульного теста?.

Я пытаюсь получить доступ к файлу Excel 2003 с помощью поставщика Microsoft Jet OleDB. Модульный тест работает хорошо, когда файл находится на жестком диске, но не когда я пытаюсь получить доступ к встроенному файлу сборки. Вот мой пример:

Оригинал

[DeploymentItem ("IHRM.Infrastructure.EFRepositories.Tests \ DataDriven.xls"), DataSource ("System.Data.OleDb", "Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = | DataDirectory | \ DataDriven" .xls; Расширенные свойства = \ "Excel 8.0 \" "," Sheet1 $ ", DataAccessMethod.Sequential), TestMethod]

1012 * Отдается *

[DataSource ("System.Data.OleDb", "Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = " что сюда поместить "; Расширенные свойства = \" Excel 8.0 \ " "," Sheet1 $ ", DataAccessMethod.Sequential), DeploymentItem (" IHRM.Infrastructure.EFRepositories.Tests \ DataDriven.xls "), TestMethod]

1 Ответ

2 голосов
/ 22 декабря 2009

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

1. извлечь ресурс

В ClassInitialize вашего теста вы можете извлечь ресурс сборки в известное место. Обратитесь к этому известному местоположению в строке подключения JET. Очистите извлеченный файл снова в тесте ClassCleanup .

2. написать свой собственный источник данных

Вы можете иметь возможность написать свой собственный DbProviderFactory , который поддерживает доступ к встроенным файлам Excel. Чтобы сделать такую ​​фабрику доступной для mstest, вам нужно зарегистрировать свою фабрику с помощью DbProviderFactories .

Чтобы увидеть, как mstest обрабатывает источники данных внутри, откройте сборку Microsoft.VisualStudio.QualityTools.Common.dll с помощью отражателя и начните следовать следу, разобрав Microsoft.VisualStudio.TestTools.Utility.TestDataConnection.Create.

...