2015-11-11 67 views
1

我在考慮使用通過種子創建的數據測試VS2015 EF Code First項目是否合理。我不清楚測試項目中的設置和拆卸以及實際測試的內容。如何使用種子數據測試實體框架

有沒有一個例子可以讓我指出這一點呢?另外,我是否認爲這是測試(種子數據)的好方法。我一直無法找到這方面的例子。我所看到的例子看起來似乎比嘲笑數據複雜得多。

回答

1

您尚未指定是否使用MSTest,但我今天剛剛遇到此問題,這是我使用MSTest所做的。這個基礎測試類在運行的第一個測試中處理種子。 Initialize(false)使它不會嘗試初始化二次測試運行,因此只有第一次測試支付設置價格。由於每個測試都在一個事務中,它們將回滾在每個測試中所做的更改。

[TestClass] 
public abstract class EntityFrameworkTest 
{ 
    private static bool _hasSeeded; 

    protected TransactionScope Scope; 

    [TestInitialize] 
    public void Initialize() 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourContext, YourModelNameSpace.Migrations.Configuration>()); 
     using (var context = new YourContext()) 
     { 
      context.Database.Initialize(false); 
      if (!_hasSeeded) 
      { 
       context.AnEntity.AddOrUpdate(c => c.EntityName, new AnEntity {EntityName = "Testing Entity 1"}); 
       context.SaveChanges(); 
       _hasSeeded = true; 
      } 
     } 

     Scope = new TransactionScope(); 
    } 

    [TestCleanup] 
    public void CleanUp() 
    { 
     Scope.Dispose(); 
    } 

    [AssemblyCleanup] 
    public static void KillDb() 
    { 
     using (var context = new YourContext()) 
      context.Database.Delete(); 
    } 
} 

這也是值得一提的,像這樣我的情況下被設置爲查找(ConnStringName)的連接字符串設置我的測試項目中的app.config。這裏的願望是,每個開發人員只需在本地數據庫中創建一個測試數據庫,並且不必爲了實際的SQL實例設置不同而將連接字符串更改爲某些東西。另外,根據您是否是VS 2015,您的本地數據庫數據源可能會有所不同。

<add name="ConnStringName" connectionString="Data Source=(localdb)\MSSQLLocalDB; Initial Catalog=DbNameTestingInstance; Integrated Security=True; MultipleActiveResultSets=True;Application Name=Testing Framework;" providerName="System.Data.SqlClient" />