Контекст сборки изменяется в MStest - можно ли избежать?

Я пытаюсь использовать MSTest на нашей базе кода. Теперь при этом я сталкиваюсь с разными проблемами.

Мы неявно используем _getDefaultName из Microsoft.Practices.EnterpriseLibrary.Data и его получает строку подключения по умолчанию в App.config текущей сборки. Поскольку этот тестовый проект будет новой сборкой / проектом, он не может найти строку подключения в исходном проекте.

Я могу избежать этого, жестко закодировав строку подключения или явно указав путь к App.config в исходном коде.

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

Будет ли моя жизнь простой, если я воспользуюсь любым другим фреймворком для тестирования?


person satyajit    schedule 18.09.2009    source источник


Ответы (2)


Что ж, ваша жизнь могла бы быть проще, если бы вы использовали другие среды тестирования;) (Я использую и люблю NUnit) но это вряд ли решит этот вопрос.

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

Если вы хотите провести модульное тестирование (в отличие от интеграционного тестирования), подумайте о написании тестов, которые вообще не обращаются к базе данных. Обычно это достигается за счет использования многоуровневой архитектуры, внедрения зависимостей и фреймворков изоляции (фиктивных объектов). На SO много всего по этим отдельным темам; пожалуйста, оставьте комментарий, если вам интересно, но у вас возникли проблемы с поиском ресурсов.

person TrueWill    schedule 18.09.2009

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

    public static class Context
    {
        private static string ConnectString;

        public static string Connect
        {
            get { return ConnectString ?? DataFactory.instance; }
            set { ConnectString= value; }
        }

        private class DataFactory
        {
            static DataFactory() { }
            internal static readonly string instance
                   = EntLib.Data._getDefaultName;
        }
    } 

Теперь, когда рабочий код запускается, он получает свою конфигурацию из EntLib - из файла App.Config. Но когда вы запускаете свой код mstest, вы обязательно вставляете нужную строку подключения в Context.Connect до того, как какая-либо часть сборки будет протестирована.

person Brent Arias    schedule 04.09.2010