无需文件访问即可获取应用程序

时间:2016-04-19 11:39:22

标签: c# .net configuration app-config

我有一个app.config工作正常。

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

在现实生活中,当然,配置文件存储在某处,但出于自动测试目的,我需要一些解决方法来从存储在内存中的字符串中读取配置文件。它甚至可能吗?我google了很多,但我发现的唯一的事情是Save it as temp file and then read,但这不是我的情况。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

如果您为测试目的创建了一种解决方法,那么您将测试不同版本的课程。这是固有的问题 - 直接依赖这些文件是不可测试的。它并不意味着它们在某种程度上是坏的,或者我们不应该使用它们,只是那些需要值的类不应该从文件中读取它们。

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

在运行时,您可以使用依赖注入容器 - 这里是walkthrough on setting one up for WCF。您可能处于不同的项目类型,但这些概念仍然适用。

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

答案 2 :(得分:0)

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

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

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

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

作为第二个选项,您可以使用命令行参数。也可以是你的选择。 (这里有关于命令行参数Backslash and quote in command line arguments

的一些棘手案例的文章

第三个选项可能是将您的文件放在 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,Version%3Dv4.5)&rd=true 也许您会发现“加载Web设置”选项很好。

调查的另一个方面可能是