私は抽象クラスを持っています(それを と呼びましょう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
それとも、単体テストのためだけに拡張する実際のクラスを定義する必要がありますか?