我目前正在创建一个使用 sql CE 数据库的应用程序,我已经使这个数据库可以与应用程序一起部署,但是我现在遇到的问题是我需要运行 TestMethods 但是这个当它在调试或发布下的“testingProject”文件夹中找不到数据库时出错,因为它是数据目录
using (SqlCeConnection sqlCon = new SqlCeConnection(@"Data Source=|DataDirectory|\database.sdf;Persist Security Info=False;"))
上面的代码是我的连接字符串,所以我猜这意味着测试正在运行并在其自己的数据目录中搜索数据库
关于在不更改数据库连接字符串、数据库位置并且仍然使我的应用程序可部署的情况下我可以做什么的任何帮助?还是我在问一些不可能的事情?
编辑
[TestMethod]
public void TestForReadingFromDB()
{
List<string> list = class.readDB();
Assert.IsNotNull(list);
Assert.AreNotEqual(0, list.Count);
}
刚刚添加到当前失败的测试方法中
最佳答案
在测试项目中,您可以使用覆盖 DataDirectory 位置
AppDomain.CurrentDomain.SetData("DataDirectory", <PATH_TO_DATA_DIRECTORY>);
例如在我的 app.config 文件中我有测试项目
<appSettings>
<add key="DataDirectory" value="..\..\Database"/>
</appSettings>
在我的测试夹具底座中,我有:
var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"];
var absoluteDataDirectory = Path.GetFullPath(dataDirectory);
AppDomain.CurrentDomain.SetData("DataDirectory", absoluteDataDirectory);
这会将 DataDirectory 设置为测试项目文件夹结构下的文件夹/Database。
一旦我在其中删除或创建数据库的副本,我就可以轻松地运行集成测试。
关于c# - 可部署数据库测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10799352/