Entity Framework4.3 и модульное тестирование. Исключение нарушения прав доступа. Попытка чтения или записи защищенной памяти

Я использую EF4.3, ASP.NET MVC4, Microsoft.VisualStudio.TestTools.UnitTesting.

Код работает нормально. Я добавил модульные тесты для проверки контроллеров. Модульные тесты не выполняются со следующим исключением:

Исключение нарушения прав доступа. Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена.

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

Я добавил [сборка: InternalsVisibleTo("TestProject")] в свой веб-проект 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 сопоставляется со сложным типом. Код DBContext для вызова SP:

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);


person ideafountain    schedule 20.08.2012    source источник
comment
дайте нам несколько строк контекста здесь.   -  person vittore    schedule 20.08.2012
comment
Это может быть выстрелом в темноту, но вы пересобирали проект или запускали тесты, все еще находясь в режиме отладки или что-то в этом роде? Я полагаю, что видел подобные проблемы в таких случаях.   -  person Kjartan    schedule 20.08.2012


Ответы (1)


Я нашел проблему. Если для свойства ProxyCreationEnabled dbContext задано значение false, тогда модульные тесты на контроллерах или методах BL, которые inturn вызывают SP через Entity Framework, завершаются с ошибкой AccessViolation Exception.

person ideafountain    schedule 21.08.2012