【发布时间】:2019-04-15 15:45:28
【问题描述】:
我尝试创建一个良好的可测试存储库类以与 Moq 一起使用。我不想重复我的选择器方法(GetAll,Get,...)。我的实现工作正常,但 SonarSource 报告错误RSPEC-1699 有人知道更好的实现吗?
var areas = new Area[] { ... };
var areaRepositoryMock = new Mock<BaseAreaRepository>() { CallBase = true };
areaRepositoryMock.Setup(m => m.Initialize()).Returns(areas);
基类
public abstract class BaseAreaRepository
{
protected Area[] _areas;
protected BaseAreaRepository()
{
this._areas = this.Initialize();
}
public abstract Area[] Initialize();
public Area[] GetAll()
{
return this._monitoredAreas;
}
public Area Get(int id)
{
return this._areas.FirstOrDefault(o => o.Id.Equals(id));
}
}
MyAreaRepository
public class MyAreaRepository : BaseAreaRepository
{
public override Area[] Initialize()
{
return //Load data from an other source
}
}
【问题讨论】:
-
您是否打算覆盖除
Initialize以外的任何内容?Initialize从哪里获取数据? -
@ScottHannen 我现在只覆盖 Initialize,数据可以来自数据库或 web 服务
标签: c# moq abstract-base-class