Nasıl birim test sebat mı?

test odaklı geliştirme pratik bir acemi olarak, sık sık bir veritabanına test kalıcılığını birim nasıl bir quandary sonunda.

teknik olarak bunun bir entegrasyon testi (birim testi değil) olacağını biliyorum, ancak aşağıdakiler için en iyi stratejileri öğrenmek istiyorum:

  1. test sorguları.
  2. test uçları. Başarısız olursa yanlış giden insertin nasıl olduğunu nasıl bilebilirim? Bunu test edebilirim ekleme ve sorgulama, ancak sorgunun yanlış olmadığını nasıl bilebilirim?
  3. test güncellemeleri ve siler - test ekleriyle aynı

bunları yapmak için en iyi uygulamalar nelerdir?


test SQL ile ilgili olarak: bunun yapılabileceğinin farkındayım, ancak NHibernate gibi bir O / R Mapper kullanırsam, çıktı sorguları için kullanılan takma adlara bazı adlandırma siğilleri ekler ve bu şekilde biraz öngörülemeyen bunun için test edebileceğimden emin değilim.

Ben sadece, her şeyi terk ve sadece NHibernate güvenmeli? Bunun ihtiyatlı olduğundan emin değilim.

44
tarihinde sordu Lukas Eder 2008-08-05 13:43:01
kaynak

10 ответов

DB ünitesine bakın. Bir Java kütüphanesidir, ancak bir C # eşdeğeri olmalıdır. Veritabanında ne olduğunu bilmek, böylece veri kümesi ile veritabanı hazırlamak sağlar, o zaman veritabanında ne olduğunu görmek için DB birimi ile arabirim yapabilirsiniz. Birçok veritabanı sistemine karşı çalışabilir, böylece gerçek veritabanı kurulumunuzu kullanabilir veya Java'da HSQL gibi başka bir şey kullanabilirsiniz (bellek seçeneğinde bir Java veritabanı uygulaması).

bunu test etmek istiyorsanız, kod, veritabanını düzgün bir şekilde kullanıyor( büyük olasılıkla yapmanız gereken), o zaman bu, her testi izole etmenin ve veritabanının hazırlanmış verileri beklediğinden emin olmanın yoludur.

16
cevap Mike Stone 2008-08-11 13:40:44
kaynak

olarak Mike Stone dedi , dbunit testlerinizi çalıştırmadan önce bilinen bir duruma veritabanı almak için harika. Testleriniz bittiğinde, dbunit, testleri çalıştırmadan önce veritabanını bulunduğu duruma geri koyabilir.

DbUnit (Java)

DbUnit.NET

15
cevap Josh Brown 2017-05-23 15:17:44
kaynak

veritabanı bağlantısını alay ederek birim testini yaparsınız. Bu şekilde, bir yöntem çağrısı akışında belirli sorguların başarılı olduğu veya başarısız olduğu senaryolar oluşturabilirsiniz. Genellikle sahte beklentilerimi oluşturuyorum, böylece gerçek sorgu metni göz ardı ediliyor, çünkü yöntemin hata toleransını ve kendisini nasıl işlediğini test etmek istiyorum-SQL'İN Özellikleri Bu amaçla alakasız.

Açıkçası bu, testinizin aslında doğrulamayacağı anlamına gelir SQL yanlış olabilir çünkü yöntem , çalışır. Entegrasyon testlerinin başladığı yer burası. Bunun için, başka birinin daha kapsamlı bir cevabı olmasını bekliyorum, çünkü ben sadece kendimle başa çıkmaya başlıyorum.

4
cevap Rytmis 2008-08-05 13:47:41
kaynak

birim test kalıcılığı, özellikle bir ORM olmadan ve böylece veritabanınızı (bağlantı) alay ederken yaşadığım sorun, sorgularınızın başarılı olup olmadığını gerçekten bilmediğinizdir. Bu sizin sorguları özellikle belirli bir Veritabanı Sürümü için tasarlanmış ve sadece bu sürümü ile başarılı olabilir. Veritabanınızı alay ederseniz bunu asla öğrenemezsiniz. Yani bence, birim test kalıcılığı sadece sınırlı kullanım içindir. Her zaman karşı çalışan testler eklemelisiniz hedeflenen veritabanı.

2
cevap dlinsin 2008-08-05 14:29:42
kaynak

JDBC tabanlı projeler için, Acolyte çerçeve kullanılabilir: http://acolyte.eu.org . Belirli bir test DB yönetmek zorunda kalmadan, JDBC soyutlama yararlanan, test etmek istediğiniz veri erişimi mockup sağlar.

2
cevap cchantep 2014-07-09 13:20:23
kaynak

için NHibernate , ünite testleri için NHibernate API ile alay etmeyi kesinlikle savunuyorum-kütüphaneye doğru şeyi yapmak için güveniyorum. Verilerin aslında DB'YE gittiğinden emin olmak istiyorsanız, bir entegrasyon testi yapın.

2
cevap Rytmis 2018-05-10 19:49:36
kaynak

veritabanını da alay eder ve sorguların beklediğinizi kontrol ederim. Testin yanlış sql'i kontrol etme riski vardır, ancak bu entegrasyon testlerinde

algılanır
1
cevap David Sykes 2008-08-05 14:19:08
kaynak

teknik olarak persistance birim testleri, entegrasyon testleri olan birim testleri değildir.

c # mbUnit kullanarak, sadece Sqlrestoreınfo ve Geri Alma öznitelikleri

kullanın
    [TestFixture]
    [SqlRestoreInfo(<connectionsting>, <name>,<backupLocation>]
    public class Tests
    {

        [SetUp]
        public void Setup()
        {

        }

        [Test]
        [RollBack]
        public void TEST()
        {
           //test insert. 
        }
    }

aynı nunit yapılabilir, öznitelik adları slighty farklıdır excpet.

sorgunuzun başarılı olup olmadığını kontrol etmek için, normalde veritabanının beklediğiniz gibi değişip değişmediğini görmek için ikinci bir sorgu ile izlemeniz gerekir.

1
cevap Dan 2008-08-05 15:39:20
kaynak

genellikle bir depo oluşturuyorum ve bunu varlığımı kaydetmek için kullanıyorum, sonra yeni bir tane alıyorum. Sonra, dosyanın kaydedilene eşit olduğunu iddia ediyorum.

1
cevap Thomas Eyde 2008-08-28 01:17:21
kaynak

Diğer sorular sql-server unit-testing tdd