代码之家  ›  专栏  ›  技术社区  ›  Glenn Slaven

当单元测试位于不同的程序集中时,如何存根Properties.Settings对象?

  •  4
  • Glenn Slaven  · 技术社区  · 15 年前

    Properties.Settings.Default... 我需要在这个对象的单元测试中存根这些值。

    internal 所以我无法从单元测试项目访问它。

    如何对这些属性的返回值进行存根?我用犀牛来模仿。

    3 回复  |  直到 15 年前
        1
  •  7
  •   kyoryu    15 年前

    一般来说,我不会。与其让“内部”对象实际读取Properties.Settings.Default,不如让它们声明一个可配置的属性(在构造时或通过属性),并让另一段代码填充它们。

    这样,您可以在单元测试中测试除默认读取内容之外的所有内容,并且您可以减少与读取默认值的方式的耦合,从而在将来更容易切换该机制。

        2
  •  4
  •   donovan    15 年前

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

        3
  •  0
  •   Smilie    8 年前

    我知道这是一个老问题,但我想我会补充我的解决方案,因为它很简单,可以帮助别人。

    创建的设置类是一个分部类,我们可以利用它创建自己的默认实现。

    在“属性”文件夹中创建新文件

    internal partial class Settings : ISettings
    {
        private static ISettings _setInstance;
    
        internal static ISettings Get
        {
            get
            {
                return _setInstance = _setInstance  ?? Default;
            }
            set { _setInstance = value; }
        }
    }
    

    然后,当我们在应用程序的其他地方使用它时,我们可以调用Settings.Get。。

    我们无法将设置文件更改为public,因为这将在下次更改或添加值时被覆盖。