ユニットテストでのDBトランザクションのロールバックを共通化する
以前こんな記事を書きましたが、
毎回テストメソッドの中で using 文やデータ投入処理を書くのが面倒になってきたので、テストフレームワーク(MSTest)の機能を使って TestInitialize 属性でDB接続、データ投入を行い、TestCleanup 属性でDB切断、ロールバックを行うようにします。
ソースコードは以下のようになりました。
[TestClass] public class DatabaseAccessTest { private TestContext context; private DbContextTransaction transaction; [TestInitialize] public void SetUp() { context = new TestContext(); transaction = context.Database.BeginTransaction(); // トランザクションを使用する // Usersテーブルの初期化,他のテーブルは残す context.Users.RemoveRange(context.Users); context.SaveChanges(); // テストデータの追加を記述する ... } [TestCleanup] public void TearDown() { transaction.Dispose(); // 終了時にロールバックする context.Dispose(); } [TestMethod] public void ConnectionTest() { // テストの実施を記述する ... } }
テストメソッドがスッキリして良い感じです。
開発環境:
Windows 10 Pro
VisualStudio 2017 Professional
Entity Framework 6.1.3
MSTest 1.2