2010-04-26 10 views
10

C# olan yeni dünyayı seviyorum, bazı birim testleri yazmaya başlamak istediğim oyuncak programlarıyla bir noktaya geldim.C# Birim Testi - Oluşturma Mock DataContexts/LINQ -> SQL sınıfları

Benim kodum şu anda bir DatabaseDataContext nesnesi (* .dbml dosyası) kullanarak bir veritabanı kullanıyor, bu nesne için bir alay oluşturmanın en iyi yolu nedir? Veritabanı LINQ -> SQL kodu oluşturmak ne kadar kolay olduğu ve bunun ne kadar yaygın olması gerektiği göz önünde bulundurulduğunda VS2010'un test edilmesine yardımcı olacak işlevselliğe sahip olduğunu umuyorum.

Eğer yoldan saparsam ve bu el ile yapılmalıysa, tercih ettiğiniz yaklaşıma göre beni aydınlatabilir misiniz?

Birçok sayesinde

Gavin

+0

LINQ ile SQL'i etkin ve başarılı bir şekilde nasıl test edeceğinizi görmek için bu cevaba bakın: http://stackoverflow.com/questions/4128640/how-to-remove-unit-of-work-functionality-from-repositories- using-ioc/4132186 # 4132186 – Steven

cevap

5

DataContext ile ilgili sorun, alay için tasarlanmamış olmasıdır.

Kaldırılamıyorsa alay etmek için ücretsiz bir araç Moles from Pex (Pex moles?)'dur. TipMock ile kabaca eşdeğerdir.

3

bildiğim en iyi yolu, bu nesnenin arayüzü ayıklamak ve sahte nesne oluşturmak için bu kullanmak, böylece için LinqToSql veya EF kullanmak gerçekten önemli olmayacak veritabanına konuşun, ya da herhangi bir veritabanıyla konuşursanız. sizin için yararlı olabilir

+3

Her ikisi de birbiriyle uyumlu olmayan modeller ürettiklerinden, EF için L2S uygulamasının yerini tutamazsınız. Sızdıran soyutlamalar sızdı. – Will

+1

@Will - iyi nokta. –

0

birkaç şey:

Moq ("Mock-siz" ya da sadece "Sahte" telaffuz edilir) sadece alay kütüphane olduğunu .NET, sıfırdan 'a kadar .NET 3.5'ten (yani, Linq ifade ağaçları) ve C# 3.0 özelliklerinden (yani lambda ifadeleri) yararlanarak yararlanırBuonu en üretken, güvenli tip ve refactoring dostu alay kütüphanesi kullanılabilir hale getirmektedir. Ve alay arabirimlerini ve sınıflarını destekler. API'sı son derece basit ve basittir, ve herhangi bir ön bilgi ya da alay kavramları ile deneyim gerektirmez. LINQ:

LINQPad size modern bir sorgu dili etkileşimli sorgu veritabanlarını sağlar. SQL Yönetimine Hoş Geldiniz Studio! ve MySQL Enterprise Server SQLite için

LINQ Objects LINQ XML WCF Veri Hizmetleri SQL ve Varlık Çerçeve LINQ & SQL Azure LINQ:

LINQPad C# 3.0 ve Çerçeve 3.5 ve daha her şeyi destekler Mindscape LightSpeed ​​ORM (Eski moda bile SQL!)