Как не разрешить воссоздание базы данных только в локальной

#c# #git #unit-testing

#c# #git #модульное тестирование

Вопрос:

У меня есть DataProvider такой InitiateDataBase метод.

     void InitiateDataBase()
    {
        //Some codes before...

        if (ShouldRecreateDataBase())
        {
            DeleateDataBase();
            CreateDataBase();
        }

        //Some codes after...
    }
  

В тестах, которые я использую DataProvider (я создаю экземпляр DataProvider при инициализации тестирования). В локальной, когда я меняю модель и запускаю некоторые тесты, база данных воссоздается. Но я не хочу всегда воссоздавать базу данных локально (это занимает несколько минут). На стороне сервера он всегда должен воссоздавать базу данных. Я хочу создать приложение, которое позволяет мне выбирать «воссоздавать базу данных или нет», но как я могу это сделать?

Комментарии:

1. Простой способ — добавьте логический параметр в InitiateDatabase, возможно, со значением по умолчанию true, а затем, когда вы вызываете его в тестовых сценариях, вы можете добавлять false , когда вы этого не хотите.

2. Итак, в локальной я присваиваю false . Я провожу свои тесты. Это не приведет к воссозданию базы данных. Все в порядке. Но когда я хочу объединить свои изменения с веткой разработки, я должен присвоить ей значение true, не так ли?

3. В идеале вы должны запускать все свои тесты как модульные тесты, и они не воссоздают базу данных (или это происходит один раз перед запуском всех модульных тестов). При развертывании в режиме реального времени вы ничего не меняете, если функция принимает параметр bool со значением по умолчанию true.

Ответ №1:

Вы можете использовать директиву #if, поэтому при использовании отладочной версии с базой данных ничего не происходит. В производственной среде вы используете версию выпуска

 void InitiateDataBase()
{
    //Some codes before...

    if (ShouldRecreateDataBase())
    {
#if !DEBUG
        DeleateDataBase();
        CreateDataBase();
#endif
    }

    //Some codes after...
  }
  

Комментарии:

1. Что, если я хочу воссоздать базу данных во время выполнения модульных тестов?

2. У вас могут быть свои собственные методы. Итак, когда вы запускаете проект, выбирается только конфигурация, при запуске в debug прямая ОТЛАДКА назначается автоматически. Например, у вас может быть 2 конфигурации отладки сборки, 1 для удаления, а остальные сохранить. И используйте что-то вроде #if KEEPDB

3. Я использую подобное, чтобы избежать изменений в коде перед публикацией. И вы можете протестировать отладочную версию на других машинах, не теряя контроля над изменениями кода… и избегайте публикации нежелательного кода в Prodution.