2016-11-09 17 views
7

Ben birim testi dışarı OData kontrolörleri çalışılıyor, ancak API'ler değişti ve daha önce ben işe yaramaz çalıştı yöntemleri önerilir - Şu anda benOData v6.0 denetleyicisini doğru şekilde nasıl test edebilirim?

kayıtlı hiçbir olmayan OData HTTP rota alıyorum.

ODataQueryOptions örneğini çalışırken kumandanın alın yöntemi ( this one gibi yanıtlara dayalı)

Benim şu anki kod geçirilecek:

 [TestMethod()] 
    public void RankingTest() 
    { 
     var serviceMock = new Mock<IVendorService>(); 
     serviceMock.SetReturnsDefault<IEnumerable<Vendor>>(new List<Vendor>() 
     { 
      new Vendor() { id = "1" } 
     }); 

     HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/odata/Vendor"); 

     ODataModelBuilder builder = new ODataConventionModelBuilder(); 
     builder.EntitySet<Vendor>("Vendor"); 
     var model = builder.GetEdmModel(); 

     HttpRouteCollection routes = new HttpRouteCollection(); 
     HttpConfiguration config = new HttpConfiguration(routes) { IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always }; 

     // attempting to register at least some non-OData HTTP route doesn't seem to help 
     routes.MapHttpRoute("Default", "{controller}/{action}/{id}", 
      new 
      { 
       controller = "Home", 
       action = "Index", 
       id = UrlParameter.Optional 
      } 
      ); 
     config.MapODataServiceRoute("odata", "odata", model); 
     config.Count().Filter().OrderBy().Expand().Select().MaxTop(null); 
     config.EnsureInitialized(); 

     request.SetConfiguration(config); 
     ODataQueryContext context = new ODataQueryContext(
      model, 
      typeof(Vendor), 
      new ODataPath(
       new Microsoft.OData.UriParser.EntitySetSegment(
        model.EntityContainer.FindEntitySet("Vendor")) 
      ) 
     ); 


     var controller = new VendorController(serviceMock.Object); 
     controller.Request = request; 

     // InvalidOperationException in System.Web.OData on next line: 
     // No non-OData HTTP route registered 
     var options = new ODataQueryOptions<Vendor>(context, request); 

     var response = controller.Get(options) as ViewResult; 

    } 

Teşekkür herhangi fikirler veya işaretçileri için!

cevap

12

System.Web.OData.Extensions.HttpConfigurationExtensions sınıftan EnableDependencyInjection yöntemi çağrısı ekleyin: bunu yapmış gibi görünüyor

HttpConfiguration config = new HttpConfiguration(); 

//1   
config.EnableDependencyInjection(); 

//2 
config.EnsureInitialized(); 
+2

Teşekkür! – kerray

İlgili konular