在Visual Studio 2010上运行ui编码测试之前设置数据库

时间:2011-11-18 11:08:30

标签: database visual-studio coded-ui-tests

我正在自动对我的Silverlight应用程序进行UI测试,并且我正在使用Visual Studio 2010。有些测试需要设置我的Oracle数据库。

我做过的事情:

1 - 一个setup.sql文件,我连接到我的数据库并对其执行操作。我将此文件作为项目的现有项目,并在TestSettings上添加为部署。

代码:

CONNECT USERNAME@DATABASE,
CREATE TABLE TABLE_NAME,
EXIT

2 - 我调用setup.sql文件的set.bat文件。我在TestSetings上的Setup and Cleanup选项卡上有了这个文件的路径。

代码:

sqlcmd -S MARIALISBOA -i setup.sql

3 - 我在TestClass上编写了一个TestInitilize方法。

代码:

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

4 - 我连接了我的数据库抛出Visual Studio(数据 - >添加新数据源)。

我在Visual Studio上运行测试但是没有在我的数据库上创建该类。

有人能帮帮我吗?我试图解决这个问题,因为星期一,我开始失去理智

1 个答案:

答案 0 :(得分:1)

虽然它无法解决您的初始问题,但解决方案是使用类似的东西;

  1. 不要在测试中创建表。这应该在安装测试环境时创建
  2. 使用测试中的帮助程序方法清除要执行的每个测试的表格。
  3. 例如(请注意,这是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");
    

    有什么好处吗?