【问题标题】:SQL Server 2014 Unit Test - Deployment to Build ServerSQL Server 2014 单元测试 - 部署到构建服务器
【发布时间】:2015-10-12 00:43:00
【问题描述】:

我第一次尝试将 Visual Studio 2013 SQL Server 数据库项目与测试项目一起使用。它似乎在我的本地机器上运行良好,但由于路径不正确,使用 TFS2013.4 在构建服务器上运行时出错:

数据库部署失败。小路 'C:\Builds\1\Database1\Database1.sqlproj' 不是指向 数据库项目文件。

在运行测试之前找不到要部署的数据库项目。

这是一个已知功能,这里有一个关于该主题的 MSDN 页面https://msdn.microsoft.com/en-us/library/jj851202(v=vs.103).aspx(请参阅“修改测试项目”标题下的部分)。但是,我发现解释不清楚。似乎也有一些错字,例如指令 6 似乎让您将 app.config 从 x 更改为 y,我看不出有什么区别。他们似乎在 BuildComputer.sqlunitttest.config 中也有一个额外的“t”,还是故意的?不确定。

基于这个 MSDN 页面,我现在有一个 app.config 如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="SqlUnitTesting" type="Microsoft.Data.Tools.Schema.Sql.UnitTesting.Configuration.SqlUnitTestingSection, Microsoft.Data.Tools.Schema.Sql.UnitTesting, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </configSections>
  <SqlUnitTesting  AllowConfigurationOverride="true">
    <DatabaseDeployment DatabaseProjectFileName="..\..\..\Database1\Database1.sqlproj" 
      Configuration="Debug" />
    <DataGeneration ClearDatabase="true" />
    <ExecutionContext Provider="System.Data.SqlClient" ConnectionString="Data Source=(localdb)\ProjectsV12;Initial Catalog=SimpleUnitTestDB;Integrated Security=True;Pooling=False"
      CommandTimeout="30" />
    <PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="Data Source=(localdb)\ProjectsV12;Initial Catalog=SimpleUnitTestDB;Integrated Security=True;Pooling=False"
      CommandTimeout="30" />
  </SqlUnitTesting>
</configuration>

注意AllowConfigurationOverride="true" 添加到SqlUnitTesting 部分的属性。

还有另一个名为 Azure-Dev-VS13.sqlunittest.config 的配置文件,其中 Azure-Dev-VS13 是构建服务器名称。内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="SqlUnitTesting" type="Microsoft.Data.Tools.Schema.Sql.UnitTesting.Configuration.SqlUnitTestingSection, Microsoft.Data.Tools.Schema.Sql.UnitTesting, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </configSections>
    <SqlUnitTesting>
        <DatabaseDeployment DatabaseProjectFileName="..\..\..\TestTeamProject\Database1\Database1.sqlproj" 
            Configuration="Debug" />
        <DataGeneration ClearDatabase="true" />
        <ExecutionContext Provider="System.Data.SqlClient" ConnectionString="Data Source=(localdb)\ProjectsV12;Initial Catalog=SimpleUnitTestDB;Integrated Security=True;Pooling=False"
            CommandTimeout="30" />
        <PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="Data Source=(localdb)\ProjectsV12;Initial Catalog=SimpleUnitTestDB;Integrated Security=True;Pooling=False"
            CommandTimeout="30" />
    </SqlUnitTesting>
</configuration>

唯一的区别是DatabaseProjectFileName属性中路径的变化。

我还在解决方案中添加了一个 Local.testsettings,在

的部署类别下有一个条目
<solutionDirectory>\TestProject1\Azure-Dev-VS13.sqlunittest.config

但是,无论我做什么,我都会收到相同的错误消息,但没有对更改后的路径的引用,所以我认为它仍在读取原始 app.config。

以上示例来自测试单机设置,其中开发机器、TFS 服务器和构建服务器是一台机器。但是,我在我们的完整开发环境中遇到了同样的错误。

任何想法。谢谢。

【问题讨论】:

    标签: visual-studio-2012 msbuild tfsbuild vstest


    【解决方案1】:

    SSDT blog 中描述了更详细的操作指南版本。

    请将此博文作为参考。我们正在更新 MSDN 文档。

    三件事很重要

    1. 在您的测试项目中更新 SqlDatabaseSetup.cs 文件的要求。对于 C#,需要在 SqlDatabaseSetup 类中添加以下代码。

      静态 SqlDatabaseSetup() { Environment.SetEnvironmentVariable("VisualStudioVersion", "12.0"); }

    2. TFS2013 具有不同的文件夹结构。应根据您的设置设置相对路径。例如,我有一个带有“E2ECIDB”和“E2ECITest”项目的解决方案“E2ECI”。它位于名为“DataDevelopers”的 TFS 项目源代码控制存储库下。我的设置中的 TFS 构建文件夹结构是 e:\LocalTFSBuild\Builds\2\DataDevelopers\E2ECI\src\E2ECI\E2ECIDB。

    相对路径从e:\LocalTFSBuild\Builds\2\DataDevelopers\E2ECI\bin目录开始,所以变成..\src\E2ECI\E2ECIDB\E2ECI.sqlproj

    1. 目前存在覆盖 app.config 文件的已知错误。推荐的方法是修改 app.config 文件以设置 TFS 服务器的路径,并为本地测试运行的解决方案中的每个开发人员或本地开发机器添加额外的配置文件。

    【讨论】:

    • 你的第三点是我认为最重要的。我在测试项目中添加了一个配置文件,纯粹是为了在构建服务器上使用。在构建中,然后我运行一个预测试批处理文件,用构建配置文件替换普通配置文件。不理想,但它似乎工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-11-01
    • 2015-03-17
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多