7

この瞬間、私は自分自身を食べています。Entity Framework がテストできないようです。作業単位、moq、またはレポパターンを使用する投稿やスレッドをたくさん読みました。

私は、アプリケーションのアーキテクチャをあまり変更できない段階にあります。現時点では、アプリケーションは完全に機能しますが、コード カバレッジを高くする必要があることを確認するため、テストを行っています。

テストのために、私は「偽のコンテキスト」メソッドを使用しています。ここでは、偽のコンテキストをモックに使用し、実際のコンテキストをデータベースへの接続に使用できます。

これを例として使用しました。 http://romiller.com/2010/09/07/ef-ctp4-tips-tricks-testing-with-fake-dbcontext/

そこでは、コンテキストが分割され、インターフェイスとして使用されていることがわかります。お気に入り:

    public interface IEmployeeContext
    {
        IDbSet Department Departments { get; }
        IDbSet Employee Employees { get; }
        int SaveChanges();
    }

    public class EmployeeContext : DbContext, IEmployeeContext
    {
        public IDbSet Department Departments { get; set; }
        public IDbSet Employee Employees { get; set; }
    }

    public class FakeEmployeeContext : IEmployeeContext
    {
        public FakeEmployeeContext()
        {
            this.Departments = new FakeDepartmentSet();
            this.Employees = new FakeEmployeeSet();
        }

        public IDbSet Department Departments { get; private set; }

        public IDbSet Employee Employees { get; private set; }

        public int SaveChanges()
        { 
         return 0; 
        }
    }

    }

したがって、テスティングとすべてが機能します。私ができないように見える唯一のことは、変更されたかどうかを確認する .State を含むコントローラーをテストすることです

これはインターフェイスを使用するため、それをインターフェイス コンテキストに追加する必要があります。そして、新しいものを作成します。または、何か不足していますか?そのコンテキストでメソッド全体を作成する意図ではない可能性があります..どうすればこれを機能させることができますか

4

3 に答える 3

4

代わりに統合テストを実行することを検討しましたか?

unit-tests プロジェクトの App.config で別の接続文字列を指定するだけで、実際の EF DBContext に対して統合テストを実行できます。

これとそれに対するすべての回答を読んでください。

于 2013-05-22T18:15:55.913 に答える
1

@Liel のおかげで、この作業を行うことができました。私の意見では、不要なコードを使用する代わりに、統合テスト用の「テスト」データベースを作成します。この方法を使用することで、私のプロジェクトは完全に独立しました。

[TestInitialize]
public void InitializBeforeTests()
{
    AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""));
    Database.SetInitializer<DataAccess.DataContext>(new DropCreateDatabaseAlways<DataAccess.DataContext>());
    var context = new DataAccess.DataContext();
    context.Database.Initialize(force: true);
}

APP.Config のテスト プロジェクトに新しい接続文字列を作成します。

回答ありがとうございます。

于 2013-05-23T08:28:28.087 に答える