【发布时间】:2016-08-10 09:35:23
【问题描述】:
我需要在使用 odata 的 web api 中对控制器进行单元测试。
我使用 Moq 来模拟实体框架。我无法模拟 OdataQueryOptions 作为参数传递给控制器的操作。
[TestMethod]
public void TestMethod1()
{
var data = new List<ActivationRequestLog>
{
new ActivationRequestLog { ActivationRequestLogID=1, SourceTokenType="happy", ProductKeyID=20140265000001, ActivationStatusCode="", AttemptDateOffset=null, HWID="", LogCreatedDateOffset=null },
new ActivationRequestLog { ActivationRequestLogID=1, SourceTokenType="happy", ProductKeyID=20140265000001, ActivationStatusCode="", AttemptDateOffset=null, HWID="", LogCreatedDateOffset=null },
new ActivationRequestLog { ActivationRequestLogID=1, SourceTokenType="happy", ProductKeyID=20140265000001, ActivationStatusCode="", AttemptDateOffset=null, HWID="", LogCreatedDateOffset=null },
}.AsQueryable();
var mockSet = new Mock<DbSet<ActivationRequestLog>>();
mockSet.As<IQueryable<ActivationRequestLog>>().Setup(m => m.Provider).Returns(data.Provider);
mockSet.As<IQueryable<ActivationRequestLog>>().Setup(m => m.Expression).Returns(data.Expression);
mockSet.As<IQueryable<ActivationRequestLog>>().Setup(m => m.ElementType).Returns(data.ElementType);
mockSet.As<IQueryable<ActivationRequestLog>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());
var mockContext = new Mock<AVSDataAccessViewEntities>();
mockContext.Setup(c => c.ActivationRequestLogs).Returns(mockSet.Object);
var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/someurl");
//var opts = new ODataQueryOptions<ActivationRequestLog>(new ODataQueryContext(modelBuilder.GetEdmModel(), typeof(ActivationRequestLog),path), request);
var service = new AVSController(mockContext.Object);
var activationRequestLog = service.GetActivationRequestLog(opts);
Assert.AreEqual(2, activationRequestLog.Count());
}
}
}
我需要找到一种合适的方式来初始化变量opts
【问题讨论】:
标签: c# unit-testing odata