Singleton类中的私有ReadOnly属性

时间:2014-07-29 21:30:57

标签: vb.net tdd

我正在尝试为我的项目编写自动化测试。

我无法控制以下代码的编写方式,也无法修改此代码:

Public Class IAmASignleton
  Private Shared ReadOnly _Instance As ISomeInterface

  Shared Sub New()
      _Instance = New ConcreteVersionOfInterface()
  End Sub
End Class

我是否有覆盖/替换此类中的实例属性,以便我可以创建此接口的测试版本,当我在Test项目中时,该接口将用于代替硬编码类?

我可以使用工具拦截对此类的调用并插入我自己的吗?

用我自己的类替换ConcreteVersionOfInterface的任何其他方法吗?

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

    GetType(IAmASignleton).GetField("_Instance", _
        Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Static _
        ).SetValue(Nothing, New ConcreteVersionOfInterface_Test)

(我在我自己的“玩具项目”中,使用你的例子IAmASignleton等,并在那里工作。)

答案 1 :(得分:0)

根据documentation,你不能这样做:

  

只能在声明中为ReadOnly变量赋值   或者在定义它的类或结构的构造函数中。