gpt4 book ai didi

visual-studio - 发布数据库项目作为 TestInitialize 的一部分

转载 作者:行者123 更新时间:2023-12-02 06:12:56 25 4
gpt4 key购买 nike

在 Visual Studio 中运行单元(或本例中的集成)测试时,是否可以将数据库项目(在同一解决方案中)作为 TestInitialize 方法的一部分发布?

这个想法是,每个实际访问数据库的集成测试都应该访问一个已知良好且干净的数据库,而做到这一点的最佳方法是在每次测试时完全刷新数据库。我一直在网上查找并找到很多有关数据库和测试的相关信息,但没有关于运行自动化测试时刷新数据库的信息。我也没有在 Visual Studio 界面中找到任何内容,或者至少我错过了它。

我使用的是 Visual Studio Ultimate 2012 RC。

最佳答案

已关注 a helpful link根据同事的建议,我最终使用 Process.Start 来运行 sqlpackage.exe 进行部署。从 Visual Studio 的角度来看,它并不像我希望的那样干净,但它完成了工作。我的引导现在看起来像这样:

private const string SQL_PUBLISH_COMMAND = @"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe";
private const string SQL_PUBLISH_COMMAND_ARGUMENTS = @"/Action:Publish /SourceFile:C:\Data\Code\NewEdCo\Domain\NewEdCo.Database.SQLExpress\bin\Debug\NewEdCo.Database.SQLExpress.dacpac /Properties:CreateNewDatabase=True /TargetServerName:hactar\sqlexpress2012 /TargetDatabaseName:NewEdCoTest";


private void DeployTestDatabase()
{
var procInfo = new ProcessStartInfo
{
Arguments = SQL_PUBLISH_COMMAND_ARGUMENTS,
CreateNoWindow = true,
ErrorDialog = false,
FileName = SQL_PUBLISH_COMMAND,
RedirectStandardOutput = true,
UseShellExecute = false
};
var proc = new Process
{
StartInfo = procInfo
};

proc.Start();
var result = proc.StandardOutput.ReadToEnd();
}

[TestInitialize]
public void BootstrapTests()
{
DeployTestDatabase();
}

[TestCleanup]
public void TearDownTests()
{
DeployTestDatabase();
}

用于 ProcessStartInfo 的选项和标准输出的读取(即使我还没有对其执行任何操作)是为了保持任务同步。这样测试就不会互相影响。这会增加集成测试的执行时间,但这足以满足我的需求。

我意识到我在之前和之后都进行了彻底的刷新。如果随着我的测试数量增加,这花费的时间太长,我会重新考虑。但现在我想确保它在测试前刷新,并且在测试后不留下任何痕迹。

MSDN has an extensive list of options对于sqlpackage.exe

关于visual-studio - 发布数据库项目作为 TestInitialize 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10914721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com