【问题标题】:How do I install a SQL Server on the hosted build agent in Visual Studio Online?如何在 Visual Studio Online 中的托管生成代理上安装 SQL Server?
【发布时间】:2015-02-26 14:48:31
【问题描述】:

我们的一位客户使用基于 Team Foundation Server (TFS) 功能的 Visual Studio Online (http://www.visualstudio.com/en-us/products/what-is-visual-studio-online-vs.aspx)

我们正在研究如何使用 Visual Studio Online 帐户进行自动化构建和自动化单元测试。

使用 Visual Studio 2012 IDE,我能够在托管构建服务中设置构建。但是,我的单元测试需要一个 Microsoft SQL Server 数据库才能正常运行,该数据库已安装在我的开发工作站上。

为了运行我的测试,我需要让我的数据库在构建代理上的 SQL 实例中运行。

是否可以在 Hosted Build Agent 上安装 SQL Server,如果可以,如何安装?

【问题讨论】:

  • @ed-Blankenship 嘿,你能回复stackoverflow.com/questions/27705432/…吗?
  • 如果你需要一个实际的数据库来运行你的测试,那么它们就不是单元测试。它们是集成测试。
  • 您应该尝试通过模拟数据库并消除对实例的需求,将您的集成测试重写为单元测试。
  • 您可以在构建序列的开头开始安装,但由于每次构建服务器都会重新映像,因此在每次构建过程中都会消耗时间。为什么不在每次构建期间启动 SQL Azure 数据库或在另一台服务器上托管 SQL 数据库?

标签: sql-server unit-testing tfs tfsbuild azure-devops


【解决方案1】:

无法向托管构建代理添加非标准功能。您被分配了一个干净的预构建 VM,它具有编译二进制文件和运行单元测试的所有标准先决条件.作为集成测试,您在上面描述的内容需要您的应用程序实例,您无法在其中运行它们。

以下是按推荐顺序排列的选项:

1 - 将测试重写为单元而不是集成

您在上面描述的测试不符合“Unit Test”的标准定义。您可以使用模拟、存根和其他测试技术将您的测试与数据库分离,以便它们只测试单个单元的功能,而不是代码之间的集成和数据库。为每个测试设置一组测试将更好地帮助您隔离问题的路径原因,并以更低的客户成本更快地修复它。它还将有助于减少随着时间的推移可能引入的错误和其他问题。

应将大型复杂集成测试保持在最低限度,因为这会增加支持它们所需的时间并最大限度地提高客户的成本。

在某些时候显然需要进行集成测试,而选项 #2 是运行集成的最佳选择。

2 - 使用发布管理进行部署和测试

您可以设置一个虚拟机来托管您的应用程序的工作版本,并使用发布管理来部署实例,然后在那里执行您的集成测试。如果您使用 VSO 托管的发布管理服务器,则仅限于将 Azure VM 作为目标。如果您部署自己的 RM 服务器,那么您也需要对其进行管理。我愿意并且确实使用托管的 RM。

我们关心的是右侧的 DevOps 位。每当您需要应用程序的实例时,都应该将其与构建服务器分开正确部署。

http://nakedalm.com/create-release-management-pipeline-professional-developers/

一旦您部署了应用程序,就可以非常简单地获取要针对实例执行的集成测试。

http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/11/deploying-and-testing-web-applications-using-release-management.aspx

如果您从上面的链接下载示例,它有一个用于在环境中执行测试的 powershell。

3 - 设置您自己的代理和控制器

您可以创建自己的构建控制器和附加到 VSO 帐户的代理并自己构建应用程序。大多数人创建一个包含他们需要的所有位并在其中运行的 Azure VM。这是您需要管理和付费的服务器。您也可以使用本地服务器。

注意:这是错误的方法,因为您的应用程序实例不应该在构建服务器上可用。构建服务器用于编译您的二进制文件并运行实际的单元测试,而不是集成或 UI 测试。

【讨论】:

  • 我开始使用 Effort Testing Tool for Entity Framework 来模拟 DBContext。以前,我使用的是 Moq 框架,但如果您希望 Moq 模拟 Entity Framework 的 DbContext,则需要指示和配置大量工作。 Effort Testing Tool 可以轻松模拟 EF 的 DbContext,但我相信 Effort Testing Tool 需要启动并运行 SQL Server 数据库才能创建 SQL Server 数据库的内存版本。
【解决方案2】:

感谢您的所有帮助。

我联系了 @tamasf,他是 Effort Testing Tool for Entity Framework 的开发人员之一,他告诉我 Effort Testing Tool 只需要了解他的 EDMX 文件即可模拟实体框架(这意味着数据库不会需要启动并运行,因此,允许我们遵循正确的单元测试实践)有关更多信息,请阅读以下帖子:How would I configure Effort Testing Tool to mock Entity Framework's DbContext withOut the actual SQL Server Database up and running?

【讨论】:

    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多