EF4.3、ASP.NET MVC4、Microsoft.VisualStudio.TestTools.UnitTesting を使用しています。
コードは正常に動作します。コントローラーをテストするために単体テストを追加しました。単体テストは次の例外で失敗します:
アクセス違反の例外。保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。
at ((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 );
}
一般的に、コードは問題なく動作します。ただし、Unit Test を使用して Controller アクションをテストすると、Access Violation Error がスローされます。行内 ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(MyEntity).Assembly);