2012-06-28 14 views
9

Verileri topluyor ve bu verileri Java kullanarak bir MySQL veritabanında saklıyorum. Ayrıca, proje oluşturmak için Maven, test framework olarak TestNG ve veritabanına erişmek için Spring-Jdbc kullanıyorum. Veritabanına erişimi kapsülleyen bir DAO katmanı uyguladık. DAO sınıflarını kullanarak veri eklemenin yanı sıra, verileri toplayan ve sonuçları diğer tablolarda (materyalize görünümler gibi) saklayan bazı sorgular yürütmek istiyorum.MySQL'e özgü sorguları dahili olarak kullanan kodu sınamak için uygun yöntem nedir?

Şimdi, DAO sınıflarının gerektiği gibi çalışıp çalışmadığını kontrol eden bazı testisler yazmak istiyorum. Bu nedenle, bazı test verileriyle doldurulacak bir bellek içi veritabanı kullanmayı düşündüm. Ben sadece gömülü veritabanı örneğini İlkbahar-JDBC tarafından sağlanan gömülü veritabanı işlevini kullanarak düşündüm Öncelikle

  1. : Ben de veri toplanmasını MySQL özgü SQL sorguları kullandığım için bazı sorun gitti . H2 uygulamasını kullanmaya karar verdim. Orada, MySQL'e özel içerik kullanan toplama sorguları nedeniyle sorun yaşadım (örneğin, DATE() gibi zaman manipülasyon işlevleri). Bu yaklaşımın bir diğer dezavantajı ise iki ddl dosyası tutmam gerektiğidir - MySQL'deki tabloları tanımlayan gerçek ddl dosyası (burada kodlamayı tanımladım ve tablo ve sütunlara yorum ekliyorum, her iki özellik de MySQL'e özeldir); ve H2, yorumları desteklemediğinden, aynı tabloları tanımlayan ancak yorum içermeyen test ddl dosyası.
  2. Test durumlarında kullanabileceğim yerleşik bir veritabanı olarak MySQL kullanmak için bir açıklama buldum (http://literatitech.blogspot.de/2011/04/embedded-mysql-server-for-junit-testing html). Bu bana gerçekten umut verici geldi. Ne yazık ki, işe yaramadı: Bir MissingResourceExcpetion oluştu "Kaynak '5-0-21/Linux-amd64/mysqld' bulunamadı". Sürücü, yerel makinemde veritabanı arka planını bulamıyor gibi görünüyor. Ama bu konu için bir çözüm bulmak için neye bakmam gerektiğini bilmiyorum.

Şimdi biraz takılıyorum ve mimariyi farklı şekilde yaratmalı mıyım diye merak ediyorum. Birinin uygun bir sistemi nasıl kurmam gerektiğine dair bazı ipuçları var mı?

  1. yerine gömülü veritabanı kullanarak, ben bir yerli MySQL örneği ve kurulum sadece testcases için kullanılan bir veritabanı ile gidersiniz: aklımda iki diğer seçenekleri vardır. Bu seçenek yavaş geliyor. Aslında, daha sonra bir CI sunucusu kurmak isteyebilirim ve test çalıştırması daha hızlı olduğu için gömülü bir veritabanı kullanmanın daha uygun olacağını düşündüm.
  2. Tüm MySQL'e özgü maddeleri SQL sorgularından siliyorum ve test için yerleşik bir veritabanı olarak H2'yi kullanın. Bu seçenek doğru seçim ise, verileri toplanmış görünümlere toplayan SQL sorgularını test etmenin başka bir yolunu bulmam gerekir.
  3. Yoksa aklımda olmayan bir seçenek var mı?

Herhangi bir ipucu için minnettarım.

sayesinde XComp

cevap

2

ben "basit" ve sınamak için özel bir MySQL örneği test için H2 veritabanı kullanarak öneririz çalışmak bellek MySQL veritabanı elde etmek mümkün değilse MySQL- belirli sorgular. Ayrıca, gerçek MySQL veritabanı için yapılan testler, ayrı bir maven profilinde, normal maven yapısının bir parçası olmadıkları şekilde entegrasyon testleri olarak yapılandırılabilir. CI sunucusunda, periyodik olarak MySQL testlerini çalıştıran ek bir iş yaratabilirsiniz, örn. günlük ya da her birkaç saatte.Böyle bir kurulumla, düzenli yapınız yavaşlamayacakken ürüne özel sorgularınızı koruyabilir ve test edebilirsiniz. Test veritabanı mevcut olmasa bile normal bir yapıyı çalıştırabilirsiniz.

maven-failsafe-plugin adı verilen bütünleştirme testleri için güzel bir maven eklentisi var. Test verilerini testlerden önce ayarlamak ve testlerden sonra veritabanını temizlemek için kullanılabilecek ön ve son entegrasyon test adımlarını sağlar.

8

Maven eklentisini tam olarak bu amaçla oluşturdum: jcabi-mysql-maven-plugin. Yerel bir MySQL sunucusunu pre-integration-test aşamasında başlatır ve post-integration-test üzerinde kapatır.

İlgili konular