Модульное тестирование 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 не работает для вашего проекта модульного тестирования.

Другие вопросы по тегам