1

私は抽象クラスを持っています(それを と呼びましょうAbstractOutputter)。そこから派生するときは、派生クラスのコンストラクターで保護されたメソッドを呼び出します。

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/

AbstractOutputter. への呼び出しのさまざまな順列にどのように応答するかを単体テストするために、Moq に から派生したクラスを作成してもらいたいと思います。次のWrite()ようなことをする必要があります。

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

これを行うことは可能ですか?Moq が作成するプロキシのコンストラクター内で特定のアクションを実行するように Moq に指示することはできますか? AbstractOutputterそれとも、単体テストのためだけに拡張する実際のクラスを定義する必要がありますか?

4

1 に答える 1

0

私はこれを寝かせるつもりです.Moqはこれを行うことができないと結論付けています.

最後にAbstractOutputter<Wotsit>、テスト用にいくつかの簡単な実装を定義しました。

于 2012-09-24T14:13:10.220 に答える