bounty还有3天到期。回答此问题可获得+250声望奖励。nick zoum正在寻找一个答案从一个有信誉的来源。
目标
我想有一个解决方案,其中包括一个SQL Server数据库项目和一个单元测试项目。(+集成测试项目?)
该解决方案将由Azure devops上的git存储库进行源代码控制,理想情况下,我希望有一个管道来启动LocalDB(mssqllocaldb)数据库,运行数据库项目的脚本/datpac,以使其加快速度,然后运行单元测试,该测试应该能够访问本地服务器上新创建的数据库。
到目前为止我所拥有的
我尝试的测试相当简单:(目前使用的是dapper,一旦我可以让这个测试工作,它将与连接字符串一起被移到API项目中):
[TestMethod]
public void TestDBConnection()
{
var connString = "Server=(localdb)\\mssqllocaldb;Database=custom_db_name_here;Trusted_Connection=True;";
using (var connection = new SqlConnection(connString))
{
var result = connection.Query<int>(sql: "select 1", commandType: CommandType.Text);
Assert.AreEqual(result.Count(), 1);
Assert.AreEqual(result.FirstOrDefault(), 1);
}
}
我对devops没有太多的经验,这是azure devops生成的yaml文件,我添加了start mssqllocaldb
任务。
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PowerShell@2
displayName: 'start mssqllocaldb'
inputs:
targetType: 'inline'
script: 'sqllocaldb start mssqllocaldb'
# Publish probably goes here, not sure how though?
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
问题
我不知道如何创建新的数据库,添加所有的结构(表,过程等)和数据。
1条答案
按热度按时间qnzebej01#
由于您使用的是dapper,我建议您使用FluentMigrator来管理迁移。当您在长时间运行的环境(如prod)中管理迁移时,这将派上用场。
有两种方法可以为测试搭建数据库并为数据库添加种子。这两个选项实际上只是您可以使用FluentMigrator应用迁移的两种方式,进程内和进程外。
选项一:作为测试初始化的一部分,过程中(我的个人偏好)
看起来您使用的是MSTest框架,因此您将放入运行迁移脚本的
[AssemblyInitialize]
代码,并为任何数据提供种子。由于您为测试播种的数据不打算播种到prod中,我将把它与迁移脚本分开。FluentMigrator使您能够在进程中运行迁移(即C#代码)。您可以在FluentMigrator quickstart guide中找到详细信息使用这种方法,您的管道将不需要更改。这样做的另一个好处是,任何想要构建本地数据库的开发人员都可以在启动本地数据库后简单地运行测试套件。
根据我的经验,尽管我会使用这种方法来搭建数据库以进行测试,但我仍然使用进程外方法将迁移应用于长时间运行的环境。
选项二:作为管道中的单独任务,进程外
这是您可以在FluentMigrator quickstart guide中找到的另一个选项。使用此选项,您可以在启动LocalDB后创建一个任务来运行迁移。我不喜欢这种方法,因为当您在本地进行开发时,您必须通过运行命令来知道何时应用迁移,这很繁琐。