2016-08-09 50 views
0

我需要在使用odata的web api中對控制器進行單元測試。無法模擬OdataQueryOptions

我用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()); 


    } 
} 

}

我需要找到一個合適的方式來初始化變量選擇採用

回答