あなたの答えは@Justinと@Petroに非常に感謝してくれました。私が思いついた解決策は、あなたが提案したテクニックの組み合わせです。以下で説明する解決策では、テストの実行ごとに新しいデータベースが提供され、テストごとに個別のトランザクションが提供されます。
私は私のテストプロジェクトのApp.configファイルで私のテストデータベースの接続文字列を追加しました:
<connectionStrings>
<add name ="TestDatabase"
providerName="System.Data.SqlClient"
connectionString="Data Source=(LocalDb)\v11.0;Database=TestDatabase;Integrated Security=True"/>
</connectionStrings>
私はセットアップとティアダウンを提供するために、私の統合テストの基本クラスを作成しました。セットアップはコンテキストをインスタンス化し、まだ存在しない場合はDBを作成し、トランザクションを開始します。ティアダウンはトランザクションをロールバックします。
public class EntityFrameworkIntegrationTest
{
protected MyDbContext DbContext;
protected TransactionScope TransactionScope;
[TestInitialize]
public void TestSetup()
{
DbContext = new MyDbContext(TestInit.TestDatabaseName);
DbContext.Database.CreateIfNotExists();
TransactionScope = new TransactionScope(TransactionScopeOption.RequiresNew);
}
[TestCleanup]
public void TestCleanup()
{
TransactionScope.Dispose();
}
}
は最後に、私はすべてのテストが実行された後にデータベースを削除するの世話をするクラスがあります。
[TestClass]
public static class TestInit
{
// Maps to connection string in App.config
public const string TestDatabaseName = "TestDatabase";
[AssemblyCleanup]
public static void AssemblyCleanup()
{
Database.Delete(TestDatabaseName);
}
}
私は私が見つけたことを追加する必要がどのようなエンティティフレームワークをより深く理解するために有用this blog post about Entity Frameworkフードの下で/慣習によってやっている。
ジミー・ボガードによるこの記事は、[統合テストでのデータベース・データの分離](http://lostechies.com/jimmybogard/2012/10/18/isolating-database-data-in-統合テスト/)。 –