SORU
20 Temmuz 2011, ÇARŞAMBA


Birim Testi DbContext

Kullanabileceğimiz teknikleri hakkında biraz bilgi araştırdımbirim DbContext test. Bazı eklemek istiyorumbellek veribağlama benim testlere karşı aday olabilir. Veritabanı-İlk yaklaşım kullanıyorum.

En yararlı bulduğum iki makale vardı this this. Bu yaklaşım bağlamında Alay olanak sağlamak MyContext ve FakeContext uygulayacak İContext bir arayüz oluşturma dayanır.

Ancak, deniyorum önlemek için kullanma alanlarına soyut EF, pointed by some insanlar, beri EF 4.1 zaten uygulayan Depo ve birim desen çalışması ile DbSet ve DbContext, ve ben gerçekten gibi korumak için tüm özellikleri tarafından uygulanan EF Ekibi korumak zorunda kalmadan onlarla ben bir genel depo olarak yaptım zaten diğer proje (ve acı verici).

Bir İContext ile çalışan aynı yolu (ya da değil mi?) için bana yol gösterecektir.

Düşündümana MyContext devraldığı bir FakeContext oluşturmave böylece altındaki DbContext avantaj veritabanı çarpmadan testimi. Benzer uygulamaları bulamadım, birisi bana bu konuda yardımcı olabileceğini umuyorum.

Ben yanlış bir şey yapıyorum, ya da bu tahmin etmiyorum bazı sorunlar beni neden olabilir?

CEVAP
20 Temmuz 2011, ÇARŞAMBA


Kendine tek bir soru sor: test Ne yapacaksın?

Her ikisini de kullanmak neden FakeContext bahsettiğiniz ve içerik Alay -? O da aynı şeyi yapıyor - bu bağlamda test sadece uygulama sağlamak için farklı yollar vardır.

Daha büyük bir sorun var - ya da içeriği veya set numara alay tek bir sonucu vardır: gerçek kodunuzu test değil.

Basit bir örnek:

public interface IContext : IDisposable
{
     IDbSet<MyEntity> MyEntities { get; }
}

public class MyEntity
{
    public int Id { get; set; }
    public string Path { get; set; } 
}

public class MyService
{
    private bool MyVerySpecialNetMethod(e)
    {
        return File.Exists(e.Path);
    }

    public IEnumerable<MyEntity> GetMyEntities()
    {
        using (IContext context = CreateContext())
        { 
            return context.MyEntities
                          .Where(e => MyVerySpecialNetMethod(e))
                          .Select(e)
                          .ToList();
        }
    }
}

Şimdi SUT (test birim test durumda bir birimdir = genellikle bir yöntem altında sistem) bu olduğunu düşünün. Test kodu FakeContext FakeSet sağlamak ve bunu başaracağız - yeşil bir test olacak. Şimdi üretim kodu DbContext DbSet türetilmiş başka bir sağlayacak ve çalışma zamanında özel durum alırsınız.

Neden? FakeContext kullanarak aynı zamanda ETMENİZ sağlayıcı ve yerine Tüzel değişti ETMENİZ ETMENİZ Nesneleri Yerel arama için çalıştırıyorsunuz .Mevcut olan SQL işlerinin yanı sıra birçok diğer SERİ özellikleri dönüştürülemez NET Varlıkları yöntemleri bu SERİ! Veri değişikliği ile de bulabilirsiniz diğer konular - tutarlılığı, ardarda silme, vb vardır. Bu kod içerik / ile ilgili Kuruluşlar bu SERİ entegrasyon testleri ile kaplı ve gerçek bir veritabanı karşı yürütülen gerektiğini düşünüyorum nedeni de budur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jcortes187

    jcortes187

    24 Mart 2006
  • RFS Dan

    RFS Dan

    22 Temmuz 2014
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009