Модульное тестирование ODataQueryOptions выдает MissingMethodException DependencyInjection
Итак, вот моя проблема: у меня есть служба OData Web Api, которая использует ODataQueryOptions для фильтрации данных с нашего сервера sql, и я пытаюсь настроить проект модульного тестирования.Net Framework для тестирования контроллеров с различными параметрами запросов. Я искал несколько дней и нашел много примеров, но большинство из них используют более старую версию OData. Этот пример является лучшим, который я нашел до сих пор, единственная проблема заключается в том, что он вызывает config.EnableDependencyInjection(); дает мне следующее исключение:
Метод не найден: 'System.IServiceProvider Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(Microsoft.Extensions.DependencyInjection.IServiceCollection)'.
Вот пример моего кода:
using System.Collections.Generic;
using System.Web.Http.Results;
using System.Web.OData;
using System.Web.OData.Query;
using System.Net.Http;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using University.API.OData.Controllers;
using University.API.OData.Models;
using System.Web.OData.Routing;
using System.Web.Http;
using System.Web.OData.Extensions;
[TestClass]
public class SalesforceUnitTest
{
private HttpRequestMessage request;
private ODataQueryOptions<Product> _options;
[TestInitialize]
public void TestInitialize()
{
request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/odata/product?$top=5");
var model = WebApiConfig.GetModel();
HttpConfiguration config = new HttpConfiguration();
config.EnableDependencyInjection(); //Throws Missing Method Exception
WebApiConfig.Register(config);
config.EnsureInitialized();
request.SetConfiguration(config);
ODataQueryContext context = new ODataQueryContext(
model,
typeof(Product),
new ODataPath(
new Microsoft.OData.UriParser.EntitySetSegment(
model.EntityContainer.FindEntitySet("product"))
)
);
_options = new ODataQueryOptions<Product>(context, request);
}
[TestMethod]
public void ProductTest()
{
var controller = new ProductController();
controller.Request = request;
var response = controller.Get(_options);
var contentResult = response as OkNegotiatedContentResult<List<Product>>;
Assert.IsNotNull(contentResult);
Assert.IsNotNull(contentResult.Content);
}
}
Дайте мне знать, если вам нужна какая-либо другая информация. Спасибо за любую помощь, которую вы можете предоставить.
РЕДАКТИРОВАТЬ: Вот что упоминается в проекте модульного теста:
EntityFramework
EntityFramework.SqlServer
Microsoft.Data.Edm
Microsoft.Data.OData
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.DependencyInjection.Abstractions
Microsoft.OData.Core
Microsoft.Odata.Edb
Microsoft.Spatial
Microsoft.Threading.Tasks
Microsoft.Threading.Tasks.Extensions
Microsoft.Threading.Tasks.Extensions.Desktop
Microsoft.VisualStudio.TestPlatform.TestFramework
Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
System
System.ComponentModel.DataAnnotations
System.Net
System.Net.Http
System.Net.Http.Extensions
System.Net.Http.Primitives
System.Net.Http.WebRequest.
System.Spatial
System.Web
System.Web.Http
System.Web.OData
ODataAPI
1 ответ
Я понял это после еще нескольких копаний. Кажется, что мой проект модульного тестирования использовал другую версию, чем мой проект ODataApi. По какой-то странной причине это вызвало исключение MissingMethodException вместо VersionMismatchException. Надеемся, что это поможет кому-то еще, кто изучает, почему Dependency Injection не работает для вашего проекта модульного тестирования.