C # почему юнит-тест имеет такое странное поведение? - PullRequest
1 голос
/ 10 июня 2010

У меня есть класс для шифрования connectionString.

    public class SKM
        {
            private string connStrName = "AndeDBEntities";

        internal void encryptConnStr()
        {
            if(isConnStrEncrypted())
                return;
            ...
        }

        private bool isConnStrEncrypted()
        {
            bool status = false;
            // Open app.config of executable.
            System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            // Get the connection string from the app.config file.
            string connStr = config.ConnectionStrings.ConnectionStrings[connStrName].ConnectionString;

            status = !(connStr.Contains("provider"));
            Log.logItem(LogType.DebugDevelopment, "isConnStrEncrypted", "SKM::isConnStrEncrypted()", "isConnStrEncrypted=" + status);
            return status;

        } 

   }

Вышеупомянутый код прекрасно работает в моем приложении. Но не в моем проекте модульного тестирования.

В моем проекте модульного тестирования я тестирую метод encryptConnStr(). это вызовет isConnStrEncrypted() метод. Тогда исключение (нулевой указатель) будет выдано в этой строке:

string connStr = config.ConnectionStrings.ConnectionStrings[connStrName].ConnectionString;

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

string connStr = config.ConnectionStrings.ConnectionStrings[0].ConnectionString;

Я помню, это работало несколько дней назад, когда я добавил выше юнит-тест Но теперь это дает мне ошибку. Модульный тест еще не интегрирован с нашей ежедневной автоматической сборкой. У нас есть только ОДНО connectionStr. Работает с продуктом, но не в модульном тесте. Не знаю почему. Кто-нибудь может мне объяснить?

Ответы [ 3 ]

1 голос
/ 10 июня 2010

В модульном тестовом проекте используется собственный файл конфигурации.Есть ли в этом файле строка подключения?

0 голосов
/ 10 июня 2010

Лично я бы предложил разделить ваш метод проверки шифрования на более общий IsStringEncrypted.

Таким образом, вы можете проверить метод шифрования, не беспокоясь о базах данных, строках соединений или web / app.configs.

В своем коде вы просто позвоните

String connectionString = GetConnectionStringFromAppConfig (); SKM.IsStringEncrypted (ConnectionString);

В своем модульном тесте вы просто определяете, какой будет connectionString для этого конкретного теста.

0 голосов
/ 10 июня 2010

config.ConnectionStrings обычно пытается прочитать файл app / web.config процесса, выполняющего этот код.Поэтому вам может понадобиться добавить файл app.config, содержащий строку подключения, внутри вашего проекта модульного тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...