c# - 可部署数据库测试方法

标签 c# database testing

我目前正在创建一个使用 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/

相关文章:

node.js - 如何在 Sequelize 现有模型中添加列?

database - 如何使用代码在VB中搜索一个access数据库的多个字段

unit-testing - WebStorm 运行所有 dart 单元测试

c# - 使用 await 时 SynchronizationContext 不流动

c# - PHP => 膨胀来自 C# SharpZipLib 的 GZipped 字符串?

c# - 如果返回值为 null 或为空,则显示一些默认文本

php - 如何使用 PHP7 连接到 sql server? (我错过了什么?)

testing - Chef - 如何处理仅为测试而安装的文件?

testing - 测试计划以及如何最好地编写它们

c# - 为什么 Int32.MinValue - 1 返回 Int32.MaxValue?