このアプリケーションでは、テストは行われていませんでした。
現在私は受け入れと単体テストを書くことができるように私たちのコードをリファクタリングしています。そうするには、データベースの抽象化が必要です。 ORMとしてEntity Framework 6を使用します。InMemoryDatabase System.Data.Entity.Databaseプロパティを偽装する
私はインターフェイスを実装するInMemoryDb
クラスを作成しました。これもEF-Contextで実装されています。
EF-DbContext
クラスは、タイプSystem.Data.Entity.Database
のDatabase
と呼ばれるプロパティを提供します。 Entities
はタイプInMemoryDb
である受け入れテストの場合は
Connection = (SqlConnection)dbBase.Entities.Database.Connection;
どこ:
残念ながら我々のコードでは、このプロパティは、このような例のために何度も使用されています。 アクセプタンステストでは、Database
プロパティがnull
であり、プロパティを正しく設定する方法がわかりません。
私はこのようなコンストラクタでそれを初期化しようとしたが、それは動作しません:
public class InMemoryDb : IEfContext, IInMemoryDb
{
public InMemoryDb()
{
this.per_person = new TestDbSet<per_person>();
this.Database = new Database(null);
}
public void Dispose()
{
throw new System.NotImplementedException();
}
public Task<int> SaveChangesAsync()
{
throw new System.NotImplementedException();
}
public Database Database { get; }
public DbSet<per_person> per_person { get; set; }
[...]
}
- 実際のデータベースのISNていることを確認しmakeingながら、このプロパティを設定するための正しい方法は何ですか使用されていませんか?
私はそれはあなたを助けることを願っ事前
データベースコンテキストを使用していませんか? –
私は生産コードを使用していますが、私のテストコード(受け入れテスト)では、実際のデータベース – xeraphim
アプリケーション全体の "パイプライン"をテストするための "Acceptence tests"の目的 - すべてのレイヤーが正しく統合されていることを知っているからですテストは "統合テスト"と密接に関連しています。を実装する実際のコードで使われている部分です。それが不可能な場合は、「.Database」プロパティーを使用するパーツを別の抽象化の背後に置き、アプローチ:再設計アプリケーションを変更するか、または「実際に」受け入れテストを実行するために実データベースまたはSQLLightデータベースを使用する方が良いでしょう – Fabio