linqtosqlコードを含むクラスの単体テストを作成したいと思います。つまり、各メソッド内で、新しいDbContextを作成し、データベースジョブを実行しました。
ウェブを検索しました。最初にリポジトリと作業ユニットのパターンを使用するようになりましたが、DbContext自体が作業ユニットであり、そのdbsetがリポジトリとして機能することがわかりました。もう1つのポイントは、Linqパーツは正常に機能するため、テストする必要はないと思います(.netチームによるテスト)。コードに追加したロジックをテストしたいと思います。そこで、2つの実装で必要なメソッドを使用してインターフェイスを作成することにしました。1つはlinqToSqlを使用し、もう1つは単なるモックです。このようなもの :
public interface IDbManager
{
bool Insert(MyEntity newEntity);
}
public class RealDbManager:IDbManager
{
public bool Insert(MyEntity newEntity)
{
using (DbDataContext db = new DbDataContext())
{
db.MyEntities.InsertOnSubmit(newEntity);
db.SubmitChanges();
}
}
}
public class MockDbManager:IDbManager
{
public bool Insert(MyEntity newEntity)
{
return true;
}
}
アイデア全体は正しいですか?もしそうなら、これは正しい実装ですか?
各メソッド内に新しいインスタンスを作成する代わりに、DbDataContextをクラス変数として定義することは可能ですか?