Настройте базу данных перед запуском кодированных тестов пользовательского интерфейса в Visual Studio 2010 - PullRequest
1 голос
/ 18 ноября 2011

Я автоматизирую тесты пользовательского интерфейса в своем приложении Silverlight и использую для этого Visual Studio 2010.Некоторые тесты требовали установки моей базы данных Oracle.

Что я сделал:

1 - файл setup.sql, где я подключаюсь к своей базе данных и выполняю над ней действия.У меня был этот файл как существующий элемент в моем проекте, и я добавляю его как Deployment on TestSettings.

Код:

CONNECT USERNAME@DATABASE,
CREATE TABLE TABLE_NAME,
EXIT

2 - файл set.bat, где я вызываю установку.файл sql.У меня был путь к этому файлу на вкладке «Настройка и очистка» в TestSetings.

Код:

sqlcmd -S MARIALISBOA -i setup.sql

3 - я написал метод TestInitilize для моего TestClass.

Код:

[TestInitialize()]
   public void Initialize()
   {
     System.Diagnostics.Process.Start("setup.bat");
   }

4 - я подключился и выполняю сброс базы данных Visual Studio (Данные -> Добавить новый источник данных).

Я запускаю тест в Visual Studio, но класс не созданв моей базе данных.

Может ли кто-нибудь мне помочь?Я пытаюсь решить эту проблему с понедельника, и я начинаю сходить с ума

1 Ответ

1 голос
/ 18 ноября 2011

Хотя это не решает вашу первоначальную проблему, решение будет использовать что-то похожее на это;

  1. Не создавайте таблицу в своих тестах.это должно быть создано при установке тестовой среды
  2. Очистите таблицу для каждого теста, который вы хотите выполнить, используя вспомогательный метод в тесте.

Например (Обратите внимание, чтоэто SQL Server, используйте соединение OLE DB или аналог);

   internal static object FireSqlStatement(string sqlStatement)
        {
            object result = null;
            using (var cn = new SqlConnection(ConfigurationManager.ConnectionStrings[connectionString].ConnectionString))
            {
                cn.Open();

                var cmd = new SqlCommand
                {

                    CommandText = sqlStatement,
                    CommandType = CommandType.Text,
                    Connection = cn
                };
                result = cmd.ExecuteScalar();
                cmd.Dispose();

                cn.Close();
            }
            return result;
        }

Пример использования этого в моем тесте;

 [Test]
        public void GetUserTriggers()
        {
            //Insert Test Record
            Helper.FireSqlStatement("INSERT INTO [Users].[Triggers] (Id) VALUES (1)");

            var request = new GetTriggersRequest()
            {
                TriggerType = TriggerType.UserTrigger
            };

            var response = ServiceInvoker.Invoke<IReports, 
                      GetTriggersRequest, GetTriggersResponse>(
                      "Reports",
                      request,
                      (proxy, req) => proxy.GetTriggers(req));

            foreach (var t in response.Triggers)
            {
                Console.WriteLine(t.Id.ToString());
            }

            Assert.NotNull(response);
            Assert.NotNull(response.Triggers);
            Assert.Greater(response.Triggers.Count, 0);
        }

В вашем случае вы можете позвонить;

 Helper.FireSqlStatement("TRUNCATE TABLE tableName");

Хорошо?

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