4

Interface IReportBuilderService と具象クラス ReportBuilderService があると仮定します

e.g. public class ReportBuilderService : IReportBuilderService { }

Moqを使ってこのサービスのモックを始めることができます

Mock<IReportBuilderService> _reportBuilderServiceMock = new Mock<IReportBuilderService>();

そして、模擬クラスで期待などを模擬します。問題ありません。

質問: 次のメソッド シグネチャをモックするにはどうすればよいですか?

public abstract class ReportBuilder<TReport> where TReport : Report, new()

ここで、TReport は次のように定義されます。

public class SomeReport : ReportBuilder<Report>, IMapper{}

そして Report クラスは単純です

public class Report { }

抽象クラス ReportBuilder には、一連のプロパティの Get/Set があります。偽造/モックしようとしているのは、これらの値です。

しかし、最初からこの抽象クラスの正しいモックを取得することはできません

これが理にかなっていることを願っています

4

1 に答える 1

1

抽象クラスが次のようになっているとします。

public abstract class ReportBuilder<TReport> where TReport : Report, new() 
{
    public abstract Int32 SomeThing { get; set; }
}

それを嘲笑してもまったく問題ありません。

var m = new Mock<ReportBuilder<Report>>();
m.SetupProperty(r => r.SomeThing, 19);

ただし、すべてのプロパティはvirtualまたはでなければならないことに注意してくださいabstract

したがって、そうでない場合 (そして、これを変更できない、または変更したくない場合)、interface基本クラスから を抽出してこれを使用することができます (それに応じてコードを変更する場合)、または単にサブクラス化してスタブ/モックを作成します。

public class StubReportBuilder : ReportBuilder<Report>
{
    public override Int32 SomeThing { get { return 42; } set { } }
}
于 2013-03-01T07:33:39.567 に答える