我有一个对象参考一堆 Properties.Settings.Default... 值和我需要将它们存根于此对象的单元测试中。

不幸的是,设置对象的类型被声明为 internal 因此,我无法从单元测试项目访问它。

如何将这些属性的返回值固定?我正在使用犀牛模拟进行模拟。

有帮助吗?

解决方案

总的来说,我不会。代替您的“内部”对象实际读取properties.settings.default,请让它们声明可配置的属性(在施工时或通过属性),并使另一个代码填充它们。

这样,您可以测试除设备测试中默认阅读内容外的所有内容,并且您与读取默认值的方式相结合,从而使将来更轻松地切换机制。

其他提示

另外,您可能会发现解决内部问题有用的另一个技巧,实际上您可以选择性地使内部代码可见到单位测试。在“代码”中,您正在测试,打开您的assemblyInfo.cs并添加以下内容:

#if UNITTEST
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("YourUnitTestAssembly")]
#endif

然后,您只需要构建中定义的UNITSEST符号,并且测试组件将能够查看所有内部成员。

我知道这是一个古老的问题,但我认为我会添加解决方案,因为它的简单可以帮助某人。

创建的设置类是部分类别,我们可以利用它来创建自己的默认设置。

在属性文件夹中创建一个新文件

internal partial class Settings : ISettings
{
    private static ISettings _setInstance;

    internal static ISettings Get
    {
        get
        {
            return _setInstance = _setInstance  ?? Default;
        }
        set { _setInstance = value; }
    }
}

然后,当我们在应用程序其他地方使用它时,我们可以调用设置。get..如果要从测试中设置值,请创建从Isettings继承的类并设置新实现。

如果您的测试是在一个单独的项目中找到的,您将必须添加另一个类以将设置器公开向公众展示。我们不能将设置文件更改为公共,因为下次我们更改或添加值时,这将被覆盖。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top