【问题标题】:Entity Framework4.3 and Unit Testing. Access Violation Exception. Attempted to read or write protected memoryEntity Framework4.3 和单元测试。访问冲突异常。尝试读取或写入受保护的内存
【发布时间】:2012-08-21 23:50:57
【问题描述】:

我正在使用 EF4.3、ASP.NET MVC4、Microsoft.VisualStudio.TestTools.UnitTesting。

代码运行良好。我添加了单元测试来测试控制器。单元测试失败并出现以下异常:

访问冲突异常。试图读或写保护 记忆。这通常表明其他内存已损坏。

在 ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(MyBusinessEntity).Assembly);

我已将 [assembly: InternalsVisibleTo("TestProject")] 添加到我的 Web 项目 AssemblyInfo.cs

有什么建议吗?

单元测试代码:

 [TestMethod]
    public void GetEntity()
    {
        // Arrange
        MyControllercontroller = new MyController();

        // Act
        var result = controller.GetEntity("737464305") as JsonResult;

        dynamic data = result.Data;

        // Assert
        Assert.IsNotNull(data);
        Assert.AreEqual("0", data.ProcessStatus);

    }

控制器操作使用 Entity Framework4.3 DBContext 调用存储过程。 SP 调用的结果映射到一个复杂类型。 SP 调用的 DBContext 代码是:

public virtual ObjectResult<MyEntity> MYSP(string inparam)
    {
        ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(MyEntity).Assembly);

        var inparamParameter = inparam != null ?
            new ObjectParameter("inparam", inparam) :
            new ObjectParameter("inparam", typeof(string));

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<MyEntity>("MYSP", inparamParameter );
    }

一般代码可以正常工作。然而, 使用单元测试测试控制器操作时引发访问冲突错误。在行 ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(MyEntity).Assembly);

【问题讨论】:

  • 在这里给我们一些上下文。
  • 这可能是在黑暗中拍摄,但您是否碰巧在仍处于调试模式时重建项目或运行测试?我相信我在这种情况下也遇到过类似的问题..

标签: asp.net-mvc unit-testing entity-framework-4 asp.net-mvc-4 vs-unit-testing-framework


【解决方案1】:

我发现了问题。 dbContext 的 iF ProxyCreationEnabled 属性设置为 false,然后通过实体框架调用 SP 的控制器或 BL 方法上的单元测试失败并出现 AccessViolation 异常。

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 2010-10-10
    • 1970-01-01
    • 2019-12-19
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多