SORU
26 Kasım 2008, ÇARŞAMBA


Nasıl NUnit ile veritabanı ile ilgili kod test edebilirim?

Veritabanı isabet NUnit ile birim testleri yazmak istiyorum. Her test için tutarlı bir durumda veritabanı almak istiyorum. Hareketleri beni "" her civarında aradım ve bu konu hakkında 2004-05 birkaç makale buldum, bu yüzden test: . geri almak için izin verecek sandım

Bu her bir test çalıştırdıktan sonra geri alma DB işlemleri için yeteneği oluşturur NUnit için özel bir öznitelik uygulanması etrafında gidermek gibi görünüyor.

Harika ama

  1. İşlevsellik NUnit bir yerde doğal olarak var olan bu mu?
  2. Bu teknik, son 4 yılda üzerine geliştirilmiş?
  3. Bu hala en iyi yolu veritabanı ile ilgili test için bir şifre mi?

< / ^ hr .

Benim DAL özellikle test etmek istediğim o değil, veritabanı ile etkileşim benim kod parçalarını test etmek istiyorum. Edit: Bu testler" ve tekrarlanabilir, eğer her biri, sonra. veritabanı sıfırlama yapabilseydim harika olurdu "no-touch olmak için

Ayrıca, şu anda herhangi bir test yer olan varolan bir projeye bu hafifletmek istiyorum. Bu nedenle, pratik olarak bir veritabanı komut dosyası ve her test için sıfırdan bir veri veremem.

CEVAP
15 Aralık 2008, PAZARTESİ


NUnit şimdi [geri alma] özniteliği vardır, ama farklı bir şey yapmayı tercih ederim. TransactionScope sınıfı kullanıyorum. Kullanmak için birkaç yol vardır.

[Test]
public void YourTest() 
{
    using (TransactionScope scope = new TransactionScope())
    {
        // your test code here
    }
}

İşlemeye Current söylemedin beri otomatik geri alma. Bir onaylama işlemi başarısız olursa bile işe yarar ya da başka bir özel durum.

Diğer taraftan Atma çağrısında Current ve [Enkaz] oluşturmak için [SetUp] kullanmaktır. Bazı kod tekrarından keser, ama aynı şeyi gerçekleştirir.

[TestFixture]
public class YourFixture
{
    private TransactionScope scope;

    [SetUp]
    public void SetUp()
    {
        scope = new TransactionScope();
    }

    [TearDown]
    public void TearDown()
    {
        scope.Dispose();
    }


    [Test]
    public void YourTest() 
    {
        // your test code here
    }
}

Bu NUnit Faciası olarak adlandırılan garanti edecek çünkü tek bir sınav ile kullanarak ifade kadar güvenlidir.

Yaptığım tüm bunları söyledikten sonra veritabanı isabet testleri birim testleri olmadığını düşünüyorum. Ben yine de bunları yazmak, ama entegrasyon testleri olarak onları düşünüyorum. Ben hala değer veren olarak görüyorum. Sadece tek bir yerde sık sık test ETMENİZ SQL kodu. Tasarımcı kullanmıyorum. Ben el DTO ve öznitelikleri yazın. Yanlış tanınırım. Entegrasyon testleri hatamı yakalamak yardımcı olur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CMTelly

    CMTelly

    2 Mayıs 2007
  • Showtime

    Showtime

    21 HAZİRAN 2006
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006