EF Core Uygulamalarını Test Etme
Testler, yaklaşık her uygulama türü için önemli bir konudur. Uygulamanızın doğru çalıştığından emin olmanızı sağlar ve gelecekte davranışı kötüleşmeye başlarsa bunu anında bilinebilir hale getirir. 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ış sunar.
Veritabanını dahil etme (veya etmeme)
EF Core uygulamanız için testler yazarken vermeniz gereken temel kararlardan biri testlerinizin üretim veritabanı sistemini mi (uygulamanızın yaptığı gibi), yoksa üretim veritabanı sisteminizin yerini alan bir test kopyasını mı kullanacağıdır. EF Core bağlamındaki iki önemli test kopyası örneği, bellek içi SQLite modu ve bellek içi sağlayıcıdır.
Farklı yaklaşımların ayrıntılı bir karşılaştırması ve analizi için bkz. Test stratejisi seçme. Farklı seçeneklerle çalışmaya başlamanıza yardımcı olacak maddeler halinde kısa bir özet aşağıdadır:
- Geliştiriciler bunun zor veya yavaş olduğunu düşündüğü için üretim veritabanı sistemleriyle test yapmaktan sıklıkla kaçınırlar. Bu, deneyimimizde her zaman doğru değildir ve bu yaklaşıma bir fırsat vermenizi öneririz: Üretim veritabanı sisteminizde 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 göre en azından bir miktar test yazmak genellikle gereklidir ve veritabanını içermeyen testler test edebileceklerinizi sınırlayabilir (aşağıya bakın).
- Bellek içi sağlayıcı birçok önemli yönden gerçek veritabanınız gibi davranmaz. Bazı özellikler test edilemez (örneğin işlemler, ham SQL...). Diğer bazı özelliklerse üretim veritabanınızdan farklı davranabilir (örneğin sorgularda büyük/küçük harf duyarlılığı). Bellek içi yöntemi basit, kısıtlanmış sorgu senaryoları için işe yarasa da oldukça sınırlıdır ve kullanımını önerilmez.
DbSet
üzerinde mock yazmak karmaşık ve zordur ve bellek içi yaklaşımla aynı olumsuzluklara sahiptir. Bu yaklaşım da önerilmez.
- SQLite tam teşekküllü bir ilişkisel veritabanı olduğundan SQLite bellek içi modu üretim ilişkisel veritabanlarıyla daha fazla uyumluluk sağlar. Ancak, SQLite ile üretim veritabanınız arasında yine de bazı önemli farklar olacaktır ve bazı özellikler hiç test edilemez (örneğin EF.Functions'da sağlayıcıya özgü yöntemler).
- Üretim veritabanı sisteminizin tüm işlevleri için güvenilir bir test kopyası kullanmanıza olanak tanıyan bir test yaklaşımı için, uygulamanıza bir depo katmanı eklemek mümkündür. Bu, EF Core'u testlerin tamamen dışında tutmanızı ve depo için tam bir mock hazırlamanızı sağlar; ancak uygulamanızın mimarisini önemli olabilecek şekilde değiştirir ve daha fazla uygulama ve bakım maliyeti getirir.
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.