【发布时间】:2020-01-07 06:41:06
【问题描述】:
我需要为我们的项目设置单元测试。在我们的控制器中,我们使用一个包含所有存储库的工作单元,并在我们的IHttpActionResult 中调用存储库来获取数据。
到目前为止,我已经设置了接口模拟,这在控制器中调用了正确的IHttpActionResult,但没有返回数据。
[TestMethod]
public void TestMethod1()
{
var unitOfWork = new Mock<IUnitOfWork>();
var repo = new Mock<IAuditReleaseRepository>();
unitOfWork.Setup(e => e.AuditReleaseRepository).Returns(repo.Object);
var auditReleaseController = new AuditReleaseController(unitOfWork.Object);
var result = auditReleaseController.Get() as ViewResult;
var model = result.ViewData.Model as IQueryable<AuditReleas>;
Assert.AreEqual(12, model.Count());
}
public class AuditReleaseController : BaseController
{
private IAuditReleaseRepository _auditReleaseRepository;
private IUnitOfWork _unitOfWork;
public AuditReleaseController(IUnitOfWork unitOfWork)
{
this._unitOfWork = unitOfWork;
this._auditReleaseRepository = unitOfWork.AuditReleaseRepository;
}
[HttpGet, Route("audit-releases")]
public IHttpActionResult Get()
{
var query = this._auditReleaseRepository.GetAll();
return Ok(query);
}
}
public class AuditReleaseRepository : RepositoryBase<AuditReleas>, IAuditReleaseRepository
{
private readonly RetailAssignmentEntities _entities;
public AuditReleaseRepository(RetailAssignmentEntities entities) : base(entities)
{
this._entities = entities;
}
IEnumerable<AuditReleaseDto> IDtoRepository<AuditReleaseDto>.GetAll()
{
return base.GetAll().Where(x=>x.IsReleaseEnabled).Select(AuditReleaseMapping.All).OrderByDescending(x => x.Id);
}
}
这是在 GetAll 方法中获取数据的映射:
public class AuditReleaseMapping
{
public static Expression<Func<AuditReleas, AuditReleaseDto>> All = (auditRelease) => new AuditReleaseDto()
{
EndDate = auditRelease.AuditReleaseEndDate,
Id = auditRelease.AuditReleaseId,
Name = auditRelease.AuditReleaseName,
StartDate = auditRelease.AuditReleaseStartDate,
AuditPeriodId = auditRelease.AuditPeriod.AuditPeriodId,
AuditYearId = auditRelease.AuditPeriod.AuditYear.AuditYearId,
AuditEndDate = auditRelease.AuditPeriod.AuditEndDate,
AuditStartDate = auditRelease.AuditPeriod.AuditStartDate
};
}
理想的做法是调用控制器,它会调用存储库,然后调用映射,但到目前为止它甚至没有调用存储库来获取数据。我需要帮助来设置该功能。
【问题讨论】:
-
你还没有模拟 IAuditReleaseRepository GetAll 方法
-
@andyb952 您想在答案中详细说明吗?
-
您在哪里设置您希望控制器在单元测试中返回的数据?如前所述,您应该设置
GetAll()以实际返回一些数据。 -
GetAll()太可怕了——这段代码会在尝试过滤之前将所有个数据库记录加载到内存中吗? -
@andyb952 我需要为我的数据返回映射实体。您是否有任何煽动如何模拟 GetAll 方法以允许这种情况发生?
标签: c# asp.net-mvc unit-testing moq