EF Core Uygulamalarını Test Etme

Test, neredeyse tüm uygulama türleri için önemli bir konudur. Uygulamanızın doğru çalıştığından emin olmanıza olanak tanır ve gelecekte davranışının gerileyip gerilemediğini anında anlayın. Test, kodunuzun mimarisinin nasıl tasarlanmasını etkileyebileceğinden, test için erken planlama yapmak ve uygulamanız geliştikçe iyi bir kapsam sağlamak kesinlikle önerilir. Bu giriş bölümü, EF Core kullanan uygulamalar için çeşitli test stratejilerine hızlı bir genel bakış sağlar.

Veritabanını dahil etme (veya etmeme)

EF Core uygulamanız için testler yazarken vermeniz gereken temel bir karar, testlerinizin üretim veritabanı sisteminizi (uygulamanızın yaptığı gibi) mi yoksa testlerinizin üretim veritabanı sisteminizin yerini alan bir test çiftine karşı mı çalıştırılacağıdır. EF Core bağlamındaki test çiftlerinin iki önemli örneği , bellek içi modda SQLite ve bellek içi sağlayıcıdır.

Farklı yaklaşımların ayrıntılı karşılaştırması ve analizi için bkz. Test stratejisi seçme. Aşağıda, farklı seçeneklerle çalışmaya başlamanıza yardımcı olacak kısa bir noktadan noktaya özet yer almaktadır:

  • Geliştiriciler bunun zor veya yavaş olduğuna inandıkları için genellikle üretim veritabanı sistemlerine karşı test yapmaktan kaçınırlar. Bu, deneyimimizde her zaman geçerli değildir ve bu yaklaşıma bir şans vermenizi öneririz: Üretim veritabanı sisteminize göre test etmek, bunu güvenilir ve verimli bir şekilde yapmak için teknikler sağlar. Uygulamanızın üretim veritabanınızda gerçekten çalıştığından emin olmak için veritabanınıza karşı en az bazı testler yazmak genellikle gereklidir ve veritabanını içermeyen testler test etme olanağıyla sınırlandırılabilir (aşağıya bakın).
  • Bellek içi sağlayıcı birçok önemli şekilde gerçek veritabanınız gibi davranmaz. Bazı özellikler bununla test edilemez (örneğin işlemler, ham SQL..) ancak diğer özellikler üretim veritabanınızdan farklı davranabilir (örneğin sorgularda büyük/küçük harf duyarlılığı). Bellek içi basit, kısıtlanmış sorgu senaryoları için işe yarasa da, yüksek oranda sınırlıdır ve kullanımını önerilmez.
    • Mock nesnesi oluşturma DbSet sorgulama için karmaşık ve zordur ve bellek içi yaklaşımla aynı dezavantajlardan muzdariptir; bunu da önermiyoruz.
  • SQLite tam teşekküllü bir ilişkisel veritabanı olduğundan bellek içi SQLite, üretim ilişkisel veritabanlarıyla daha iyi uyumluluk sağlar. Ancak, SQLite ile üretim veritabanınız arasında bazı önemli tutarsızlıklar olmaya devam eder ve bazı özellikler hiç test edilemez (örneğin, EF.Functions üzerinde sağlayıcıya özgü yöntemler).
  • Üretim veritabanı sisteminizin tüm işlevleri için güvenilir bir test çifti kullanmanıza olanak tanıyan bir test yaklaşımı için uygulamanıza bir depo katmanı eklemek mümkündür. Bu, EF Core'un testlerden tamamen hariç tutulmasını ve depo arayüzünün tamamen taklit edilmesini sağlar; ancak bu, uygulamanızın mimarisini önemli derecede değiştirebilir ve daha fazla uygulama geliştirme ve bakım maliyeti içerir.

Daha fazla bilgi

Daha ayrıntılı bilgi için bkz. Test stratejisi seçme. Uygulama yönergeleri ve kod örnekleri için bkz . Üretim veritabanı sisteminize göre test etme ve Üretim veritabanı sisteminiz olmadan test etme.