6

我想從集成測試開始。我正在使用ASP.NET MVC 3應用程序。我正在使用實體框架4 Code First CTP5。我對數據庫的集成測試是在一個單獨的項目中,比如MyProject.Data.IntegrationTests。實體框架集成測試4代碼優先使用SQL Server CE 4或SQLite

我打算使用SQL Server CE 4或SQLite。任何建議/技巧/意見使用任何一個這些我想要完成的?

有誰知道任何像樣的文章,我可以讀我想要完成的?幫助/反饋將不勝感激。

我正在爲我的數據庫使用SQL Server 2008。但是,當測試我的存儲庫時,我想對上面提到的這些數據庫之一進行測試,所以我需要指定連接字符串。

UPDATE

我從一個服務層(從我的控制器調用),然後將服務層將調用我的倉庫工作。有關示例,下面是我想補充一條新聞:

服務類:

public class NewsService : INewsService 
{ 
    private INewsRepository newsRepository; 

    public NewsService(INewsRepository newsRepository) 
    { 
     this.newsRepository = newsRepository; 
    } 

    public News Insert(News news) 
    { 
     // Insert news item 
     News newNews = newsRepository.Insert(news); 

     // Insert audit entry 

     // Return the inserted news item's unique identifier 
     return newNews; 
    } 
} 

庫類:

public class NewsRepository : INewsRepository 
{ 
    MyContext context = new MyContext(); 

    public NewsRepository() 
    { 
    } 

    public News Insert(News news) 
    { 
     int newsId = context.Database.SqlQuery<int>("News_Insert @Title, @Body, @Active", 
     new SqlParameter("Title", news.Title), 
     new SqlParameter("Body", news.Body), 
     new SqlParameter("Active", news.Active) 
    ).FirstOrDefault(); 

     news.NewsId = newsId; 

     // Return the inserted news item 
     return news; 
    } 
} 

我使用實體框架4代碼首先CTP5和NUnit。 NUnit有沒有類似於XUnit的回滾?

回答

2

如果您使用像XUnit(http://xunit.codeplex.com/)這樣的測試框架,它會附帶一個名爲[AutoRollback]的功能,該功能將回滾在測試中運行的事務,所以您的數據都不會改變!

至於如何設置測試,我需要更多地瞭解如何設置您的數據訪問。你有沒有使用倉庫模式? (Entity Framework 4 CTP 4/CTP 5 Generic Repository Pattern and Unit Testable)。如果我能看到你的一些代碼,它會有所幫助。下面是一個的xUnit樣本集成測試:

private readonly IUserRepository _repository; 
     public UserRepositoryTests() 
     { 
      _repository = new UserRepository(base._databaseFactory); 
     } 

     [Fact, AutoRollback] 
     public void Should_be_able_to_add_user() 
     { 
      var user = new User{Name = "MockName"}; 
      _repository.Add(user); 
      base._unitOfWork.Commit(); 

      Assert.True(user.Id > 0); 
     } 

所以上面的測試將用戶添加到我的數據庫,然後檢查其ID屬性,以檢查SQL Server的自動生成ID吧。由於該方法是用AutoRollback屬性修飾的,因此該方法結束後數據將從我的數據庫中刪除!

+0

謝謝。請參閱我更新的帖子。您是否使用實時數據庫進行測試?你使用什麼類型的數據庫?你有這個單獨的項目嗎?你的數據庫是否駐留在這個項目中。請讓我知道如果你需要知道其他東西:) – 2011-02-17 05:58:29

相關問題