How to unit test OData v6.0 controller correctly?

I am trying to run a unit test from OData controllers, however the APIs are changed and the previously recommended methods that I tried do not work - currently I get

A route route without OData is not registered.

when trying to create an instance of ODataQueryOptions to pass to the controller's Get method

My current code (based on answers like this ):

[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; } 

Thanks for any ideas or pointers!

+7
c # unit-testing odata asp.net-web-api2
source share
1 answer

Add a call to the EnableDependencyInjection method from the System.Web.OData.Extensions.HttpConfigurationExtensions class:

 HttpConfiguration config = new HttpConfiguration(); //1 config.EnableDependencyInjection(); //2 config.EnsureInitialized(); 
+12
source share

All Articles