azure - Team Foundation 服务自动构建和测试数据库错误

标签 azure azure-devops

我正在尝试在 Team Foundation Service 上设置自动构建和测试,但无法让测试连接到我的 Azure 数据库,因此我的测试不断失败。

构建进展顺利,但任何导致站点连接到我的数据库的测试都会失败。我在 Azure 上设置数据库并将其与我的 Azure 站点关联。我配置了数据库允许的 IP 地址以包括我的本地计算机,并将其设置为允许 Azure 服务连接。该网站在我的计算机上本地运行,发布到我的 Azure 网站时也可以运行,并且从两个地方都可以很好地连接到 Azure 数据库。

我使用 Team Foundation Service ( https://tfs.visualstudio.com/ ) 进行源代码管理,并在 Team Foundation Service 中设置了自动构建,并从这些构建持续部署到 Azure。所有其他方面都工作正常,源代码控制,在 checkin 时开始构建,构建部署到我的 Azure 站点,但我的测试都没有通过。

错误消息:

在代码优先 EF 的项目上:

Test method MySite.Tests.Controllers.HomeControllerTest.Index threw exception: System.Data.SqlClient.SqlException: CREATE DATABASE permission denied in database 'master'.

在数据库优先的 EF 项目上:

Test method tfstest4.Tests.Controllers.HomeControllerTest.Index threw exception: System.InvalidOperationException: No connection string named 'TestDbContext' could be found in the application config file.

(请注意,连接字符串确实存在,并且在本地以及部署到 Azure 后都可以正常工作)

非常感谢有关在需要数据库访问的 Team Foundation Service 上运行单元测试的任何建议。

最佳答案

如果您正在运行自动化单元测试,我的建议是删除对数据库的任何依赖项,因为您没有理由测试 Entity Framework 。我个人会做的是将我的数据库层隐藏在某种形式的存储库接口(interface)后面,并在运行测试时使用某种形式的依赖项注入(inject)策略或工厂模式提供一些模拟实现。

如果您还运行自动化集成测试,那么涉及数据库可能更有意义。您的连接字符串可能不存在于测试项目的配置中。我不确定您如何告诉 EF 使用哪个连接字符串,但我建议避免直接依赖于设置条目。

如果您使用 EF Code First,则可以将连接字符串作为参数提供给 DbContext 类的基本构造函数。例如,您可以将连接字符串放入静态属性中,并在实例化数据库上下文时获取它

public static class MyConnectionStringProvider
{
    public static string ConnectionString{ get; set; }
}

public class MyDbContext : DbContext
{
    public MyDbContext() 
       : base(MyConnectionStringProvider.ConnectionString)
    { }
}

现在,在应用程序启动和测试设置例程中的某个时刻,您可以设置连接字符串。这允许您控制要使用的连接字符串。

例如,如果您正在运行 azure 网站,您通常会在 Application_Start 方法中从角色配置而不是 app.config 文件中获取连接字符串。

MyConnectionStringProvider.ConnectionString = 
     RoleEnvironment.GetConfigurationSettingValue("MyConnectionString")

在你的测试类中,你可以做一些完全不同的事情

MyConnectionStringProvider.ConnectionString = "[connectionstring to my test database]"

最后,可能存在一些防火墙问题需要解决,因为您可能需要在 SQL Azure 服务器防火墙中为运行测试的计算机添加异常(exception)。如果有必要,我会联系微软支持人员。

关于azure - Team Foundation 服务自动构建和测试数据库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15060536/

相关文章:

azure - 无法在 Azure DevOps Pipeline 中找到为 ARM 模板部署创建的 JSON 文件路径

python - 如何在不使用用户名、密码或 PAT token 的情况下对 azure devops api 进行身份验证

linux - 通过 Azure Devops 将 docker 镜像部署到 Linux 上的 Web 应用程序失败

Azure Pipelines (yaml) 使用条件设置新变量

azure - 您可以从不同区域在 AKS Kubernetes 群集上安装 NetApp 卷吗?

sql-server - 直接从 SQL Server 获取 Azure ML 中的数据

azure - 如何使用 Azure 运行 REST API 获取管道运行错误

azure - 静态和动态 Azure 文件有什么区别?

tfs - 与 Team Foundation 中的功能和待办事项相关的 Epics 是什么?

AzureResourceManagerTemplateDeployment 在 Azure DevOps 管道中失败