Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Team Foundation服务自动生成和测试数据库错误_Azure_Azure Devops - Fatal编程技术网

Azure Team Foundation服务自动生成和测试数据库错误

Azure Team Foundation服务自动生成和测试数据库错误,azure,azure-devops,Azure,Azure Devops,我试图在Team Foundation服务上设置自动化的构建和测试,而我不能得到测试连接到我的Azure数据库,所以我的测试一直失败。 构建进行得很顺利,但是任何导致站点连接到我的数据库的测试都会失败。我在Azure上设置数据库并将其与Azure站点关联。我将数据库允许的IP地址配置为包括我的本地计算机,并将其设置为允许Azure服务连接。该站点在我的机器上本地工作,并且在发布到我的Azure网站时也可以工作,并且可以从这两个地方连接到Azure数据库 我使用Team Foundation Se

我试图在Team Foundation服务上设置自动化的构建和测试,而我不能得到测试连接到我的Azure数据库,所以我的测试一直失败。 构建进行得很顺利,但是任何导致站点连接到我的数据库的测试都会失败。我在Azure上设置数据库并将其与Azure站点关联。我将数据库允许的IP地址配置为包括我的本地计算机,并将其设置为允许Azure服务连接。该站点在我的机器上本地工作,并且在发布到我的Azure网站时也可以工作,并且可以从这两个地方连接到Azure数据库

我使用Team Foundation Service()为我的源代码管理,并在Team Foundation Service中安装安装自动化,并从这些构建中连续部署到Azure。所有其他方面都很好,包括源代码控制、从签入开始的构建、部署到Azure站点的构建,但我的测试都没有通过

错误消息:

对于代码优先EF的项目:

测试方法MySite.Tests.Controllers.HomeControllerTest.Index 异常:System.Data.SqlClient.SqlException:创建数据库 数据库“master”中的权限被拒绝

在数据库第一个EF的项目上:

试验方法tfstest4.Tests.Controller.HomeControllerTest.Index 异常:System.InvalidOperationException:无连接字符串 在应用程序配置文件中可以找到名为“TestDbContext”的文件

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


<>关于在需要访问数据库的Team Foundation Service上运行单元测试的任何建议都是非常值得赞赏的。

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

如果您也在运行自动化集成测试,那么让数据库参与进来可能更有意义。您的连接字符串可能不在测试项目的配置中。我不知道如何告诉EF使用哪个连接字符串,但我建议避免直接依赖设置条目

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

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

public class MyDbContext : DbContext
{
    public MyDbContext() 
       : base(MyConnectionStringProvider.ConnectionString)
    { }
}
现在,在应用程序启动和测试设置例程的某个时刻,您可以设置连接字符串。这允许您控制要使用的连接字符串

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

MyConnectionStringProvider.ConnectionString = 
     RoleEnvironment.GetConfigurationSettingValue("MyConnectionString")
在你的测试课上,你可以做一些完全不同的事情

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

最后,可能需要解决一些防火墙问题,因为您可能需要为运行测试的计算机在SQL Azure Server防火墙中添加异常。如果有必要,我会就此联系MS支持部门。

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

如果您也在运行自动化集成测试,那么让数据库参与进来可能更有意义。您的连接字符串可能不在测试项目的配置中。我不知道如何告诉EF使用哪个连接字符串,但我建议避免直接依赖设置条目

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

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

public class MyDbContext : DbContext
{
    public MyDbContext() 
       : base(MyConnectionStringProvider.ConnectionString)
    { }
}
现在,在应用程序启动和测试设置例程的某个时刻,您可以设置连接字符串。这允许您控制要使用的连接字符串

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

MyConnectionStringProvider.ConnectionString = 
     RoleEnvironment.GetConfigurationSettingValue("MyConnectionString")
在你的测试课上,你可以做一些完全不同的事情

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

最后,可能需要解决一些防火墙问题,因为您可能需要为运行测试的计算机在SQL Azure Server防火墙中添加异常。如果有必要,我会就此联系MS支持部门。

本地的连接字符串(web.config/web.debug.config)指向本地db(SQL Express/(local))或Azure db?您是否检查了测试项目中的app.config文件以验证连接字符串是否正确。以及本地的连接字符串(web.config/web.debug.config)指向本地数据库(SQL Express/(本地))或Azure DB?您是否检查了测试项目中的app.config文件以验证connectionstring是否正确。解决当前技术问题的重要部分是注意到连接字符串不在我的测试项目中。我一直在本地测试,没有意识到测试项目有单独的app.config文件.Co从App.CONFIG到Web.CONFIG的连接字符串在我的Team Foundation Service Bug中进行了测试运行。从我的测试中删除数据库依赖的一般建议也很好,我也将对此进行研究。