0

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

4

1 に答える 1