0

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

4

1 回答 1

0

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

于 2012-08-21T15:50:57.593 回答