在不访问文件的情况下获取应用程序设置

本文关键字:获取 应用程序 设置 情况下 访问 文件 | 更新日期: 2024-10-19 01:16:24

我有一个运行良好的app.config。

但我也有一个自动化测试的工具,它在没有任何文件访问的环境中运行一些测试。因此,我必须从字符串(或内存流)中读取配置文件,但不进行物理映射,因为这个自动测试过程无法访问文件系统。

当然,在现实生活中,配置文件存储在某个地方,但出于自动化测试的目的,我需要一些变通方法来从存储在内存中的字符串中读取配置文件。这可能吗?我在谷歌上搜索了很多,但我只找到了Save it as temp file and then read,但这不是我的情况。

在不访问文件的情况下获取应用程序设置

避免类直接依赖于app.config或任何其他文件。您的类不需要app.config或Properties.Settings。它需要这些文件中包含的值

如果您为测试目的创建了一个变通方法,那么您正在测试类的不同版本。这就是固有的问题——对这些文件的直接依赖是不可测试的。这并不意味着它们在某种程度上不好,也不意味着我们不应该使用它们,只是需要这些值的类不应该从文件中读取它们。

一个理想的解决方案是构造函数注入,这是一种依赖注入形式。在类的构造函数中为其提供值,并将其存储为字段。这样,当创建类时,它总是具有所需的值。

在运行时,您可以使用依赖项注入容器——下面是关于为WCF设置依赖项注入的演练。您可能处于不同的项目类型,但这些概念仍然适用。

但对于测试来说,它就像创建一个类并将您想要使用的任何值传递到构造函数中一样简单。当类从设置中读取时,不可能使用不同的值进行测试,但使用构造函数注入很容易。

如果没有配置文件,您将拥有默认设置。您可以覆盖默认值:

Properties.Settings.Default["PropertyName"] = NewPropertyValue";

(在Settings类上设置正确的访问修饰符,如果它在库中,则使用正确的命名空间)

在您的情况下,作为第一个选项,我会选择Settings文件。即使您的用户也无法访问设置文件内容。然后它将返回一个特定属性的默认值。

你可以尝试creaty一个愚蠢的控制台应用

static void Main(string[] args)
{
    Console.WriteLine(Settings.Default.MyProperty);
    Console.ReadLine();
}

您是否在项目属性设置选项卡上设置了MyProperty值。然后你可以构建你的解决方案,打开二进制文件文件夹,删除exe.config文件,你会看到应用程序将使用默认值。

作为第二个选项,您可以使用命令行参数。也可能是您的一个选择。(以下是关于命令行参数的一些棘手情况的文章Backslash和命令行参数中的引号)

第三种选择是将您的文件放在c:''users''your-app-user''AppData''Roaming''YourAppName文件夹中。在这里,您应该被授予文件访问权限,即使是受限制的用户

出于教育原因,我也建议看一下这篇文章:https://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(ApplicationSettingsOverview);k(TargetFrameworkMoniker-.NETFramework,版本%3Dv4.5)&rd=真也许你觉得"加载Web设置"选项不错。

另一种调查方法可能是