2016-01-12 20 views
11

DB katmanını birim testine Effort framework'ü (sürüm 1.1.4) kullanırken sorun yaşıyorum.Çaba birimi testi Varlık çerçevesi 6.1.3 DB-ilk

Varlık çerçevesi 6.1.3 kullanan bir DB katmanım var ve model veritabanı ilk yaklaşımla oluşturulduğundan, modeli açıklayan bir *.edmx dosyası var.

public partial class Entities 
{ 
    public Entities(DbConnection connection) 
     : base(connection, true) 
    { 
    } 
} 

basit birim testi aşağıdaki gibidir::

Böyle çabayla birim testleriyle kullanılan ek bir yapıcı ortaya çıkarmak için kısmi sınıfını oluşturduk

private Entities CreateContext() 
    { 
     //var connectionString = ConfigurationManager.ConnectionStrings["Entities"].ConnectionString; 
     //var connection = Effort.EntityConnectionFactory.CreateTransient(connectionString); 
     //return new Entities(connection as DbConnection); 

     var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities"); 
     var context = new Entities(connection); 
     return context; 
    } 

    [TestMethod] 
    public void Testing_Effort_Integration() 
    { 
     using (var context = CreateContext()) 
     { 
      var entity = context.TableEntity.FirstOrDefault(i=> i.Id); 
      Assert.IsNotNull(entity); 
     } 
    } 

zaman

var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities"); 
: hat için bir istisna atar birim testi

{"Sağlayıcı bir ProviderManifest örneği döndürmedi.}} InnerException İleti: {" Depolama sürümü belirlenemedi; Geçerli bir depolama bağlantısı veya bir sürüm ipucu gereklidir. "} Bulduğum

Diğer mesajlar gelen *.edmx dosyada ProviderManifestToken niteliğini değiştirmek önerir '' den '2008'. Bu sorunu çözmek gibi görünüyor 2012'de burada ilk kez bağlamını kullanmaya çalışırken ancak bunun yerine benim başka istisna verir: 'tip ait sağlayıcı fabrikası için sağlayıcı adını belirlenemedi

var entity = context.TableEntity.FirstOrDefault(i=> i.Id); 

NotSupportedException System.Data.EntityCli ent.EntityProviderFactory'. ADO.NET sağlayıcısının, uygulama yapılandırmasında yüklü veya kayıtlı olduğundan emin olun.

Bu sorunu nasıl çözeceğimizi bilen biri var, bu nedenle Effity'yi varlık çerçevesiyle birlikte kullanabilirim 6.1.3 DB-ilk yaklaşımı?

EF 4 ve EF 5'te DB-ilk yaklaşımıyla oluşturulan birim test DB katmanlarına Effort (sürüm 1.1.4) uygulamasını başarıyla kullanabildim - bu yüzden EF sürümünün olabileceğini düşünüyorum. faiz ...

cevap

17

Bir meslektaşım benim sorunumun çözümünü buldu!

Görünüşe göre "Effort.EF6" nuget paketi yerine "Effort" nuget paketini kullanıyordum. Diğer kaldırıp kurduktan sonra ben de etiketleriyle benim app.config güncellemek zorunda:

<system.data> 
    <DbProviderFactories> 
     <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" /> 
    </DbProviderFactories> 
    </system.data> 

    <entityFramework> 
    <providers> 
     <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" /> 
    </providers> 
    </entityFramework> 

Ve birim testleri çaba sağlayıcı kayıt için ben de kurulumunda bir çağrı dahil:

[SetUp] 
    public void Setup() 
    { 
     EffortProviderConfiguration.RegisterProvider(); 
    } 

Bu, benim için sorunu çözdü. Umarım başkalarına yardım edebilir!