gpt4 book ai didi

.net - 在单元测试中修改应用程序设置

转载 作者:行者123 更新时间:2023-12-03 20:15:51 25 4
gpt4 key购买 nike

我有一个类库,我想使用 Microsoft 的单元测试框架进行单元测试。我想测试的一些类是使用应用程序设置进行配置的。这些设置在 Settings.settings 中定义具有应用范围和合适的默认值的文件。当应用程序使用库时,这些设置可以在 App.Config 中被覆盖。文件。如果不是,则使用默认值。这正是我想要的。

在我的一些测试用例中,我想测试设置值的特殊组合,但我不知道如何从单元测试代码中更改被测类看到的值。这些设置将始终从代码生成的类的属性加载其默认值。

在我的图书馆类(class)中,我访问这样的设置:

var mySetting1 = Settings.Default.MySetting1;
var mySetting2 = Settings.Default.MySetting2;

在被测类访问设置之前,如何在单元测试中修改这些设置?使单元测试可以访问内部设置类并不能解决问题,因为设置具有应用程序范围并且是设置类的只读属性。

最佳答案

进入 ApplicationSettingsBase 后和相关的类我想出了这个解决我的问题的方法。不是特别漂亮,但它肯定能完成工作。

代码生成的设置类在类库项目内部,单元测试项目必须可以访问它。添加 [assembly: InternalsVisibleTo("UnitTestAssemblyName")]归因于 AssemblyInfo.cs在类库项目中。

当访问值时,设置是从设置类上的属性延迟加载的。第一步是对设置进行“虚拟”读取以强制执行此延迟加载。当单元测试时,您希望避免在一个测试中更改设置值影响另一个测试,因此有必要在延迟加载之前“重置”设置。这可以使用 Reload() 来完成方法。这段代码放在测试初始化​​方法中:

Settings.Default.Reload();
var dummy = Settings.Default.MySetting1;

基础值现在存在并且可以在每个测试方法中设置。请记住使用正确的类型,因为代码生成的 getter 将执行强制转换:
Settings.Default.PropertyValues["MyStringSetting1"].PropertyValue = "Foobar";
Settings.Default.PropertyValues["MyDoubleSetting2"].PropertyValue = 3.1416D;

关于.net - 在单元测试中修改应用程序设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3719107/

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