代码之家  ›  专栏  ›  技术社区  ›  moribvndvs

设置MOQ以忽略虚拟方法

  •  9
  • moribvndvs  · 技术社区  · 14 年前

    我有一个抽象类,它有一个虚拟方法。如果以后的实现需要重写该功能,则该方法是虚拟的。

    但是,moq代理所有虚拟方法,因此我似乎无法测试编写的实际代码,而是使用该方法的模拟设置(当前是返回默认值)。

    示例摘要:

    public abstract SomeAbstract
    {
        public abstract Format(IFormatProvider provider, string format)
        {
              // does some stuff i need to test
        }
    }
    

    我的修女测试:

    [Test]
    public void Should_Set_Format_State()
    {
       Mock<SomeAbstract> mock = new Mock<SomeAbstract>();
       mock.Object.Format(CultureInfo.CurrentCulture, "format string");
    
       // do tests to make sure Format correctly changed the object's state
    }
    

    如何设置模拟对象以使虚拟对象 Format 方法工作,无需移除 virtual 从方法上?!也许我在滥用这个案例中的嘲弄概念。

    1 回复  |  直到 14 年前
        1
  •  14
  •   Pete    14 年前

    我相信在模拟上设置“callbase=true”是可行的。请参见 Quick Start