Я использую 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);