【问题标题】:Unable to mock OdataQueryOptions无法模拟 OdataQueryOptions
【发布时间】:2016-08-10 09:35:23
【问题描述】:

我需要在使用 odata 的 web api 中对控制器进行单元测试。

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


    }
}

}

我需要找到一种合适的方式来初始化变量opts

【问题讨论】:

    标签: c# unit-testing odata


    【解决方案1】:

    odata 的测试对您有帮助吗?

    https://github.com/OData/WebApi/blob/master/OData/test/UnitTest/System.Web.OData.Test/OData/Query/EnableQueryAttributeTest.cs#L776

            ODataQueryContext context = new ODataQueryContext(EdmCoreModel.Instance, typeof(int));
            HttpRequestMessage request = new HttpRequestMessage();
            request.EnableHttpDependencyInjectionSupport();
            Mock<ODataQueryOptions> queryOptions = new Mock<ODataQueryOptions>(context, request);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多