1

我有一个抽象类(我们称之为AbstractOutputter)。当我从它派生时,我在派生类的构造函数中调用一个受保护的方法。

抽象输出

public abstract class IOutputter<T>
{
  protected void Write(Func<T, string> output)
  {
   ... 
  }
}

派生类

public class WotsitOutputter: AbstractOutputter<Wotsit>
{
  public WotsitOutputter()
  {
    Write(x => x.Property1.ToString());
    Write(x => x.Property2.ToString());
  }
}

该模式与在 FluentValidation 中创建验证器类相同:

http://fluentvalidation.codeplex.com/

我希望 Moq 为我创建一个派生自 . 的类AbstractOutputter,以便对它如何响应对 . 的各种调用排列进行单元测试Write()。我需要执行以下操作:

Mock<AbstractOutputter<Wotsit>> mockOutputter = new Mock<AbstractOutputter<Wotsit>>();
// Instruct Moq to make various calls to protected method in constructor of mock class

是否有可能做到这一点?我可以以某种方式告诉 Moq 在它创建的代理的构造函数中执行某些操作吗?AbstractOutputter或者我是否需要为单元测试定义真正的类?

4

1 回答 1

0

我要搁置这一点:我得出结论,Moq 无法做到这一点。

最后我只是AbstractOutputter<Wotsit>为了测试的目的定义了一些简单的实现。

于 2012-09-24T14:13:10.220 回答