gpt4 book ai didi

sql-server - 使用 Entity Framework 4 Code First 使用 SQL Server CE 4 或 SQLite 进行集成测试

转载 作者:IT王子 更新时间:2023-10-29 06:26:41 36 4
gpt4 key购买 nike

我想从集成测试开始。我正在使用 ASP.NET MVC 3 应用程序。我正在使用 Entity Framework 4 Code First CTP5。我对数据库的集成测试在一个单独的项目中,例如 MyProject.Data.IntegrationTests。

我计划使用 SQL Server CE 4 或 SQLite。关于使用其中任何一个来实现我想要完成的目标,有什么建议/提示/意见吗?

有人知道我可以阅读关于我正在努力完成的事情的任何体面的文章吗?并提供帮助/反馈,我们将不胜感激。

我的数据库使用的是 SQL Server 2008。但是在测试我的存储库时,我想针对上面提到的这些数据库之一测试它们,因此我需要指定连接字符串。

更新

我在服务层(从我的 Controller 调用)工作,然后服务层将调用我的存储库。例如,下面是我将如何添加新闻项:

服务类:

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;
}
}

我正在使用 Entity Framework 4 Code First CTP5 和 NUnit。 NUnit 有没有类似于 XUnit 回滚的东西?

最佳答案

如果您使用像 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 属性修饰的,所以在该方法结束后,数据将从我的数据库中删除!

关于sql-server - 使用 Entity Framework 4 Code First 使用 SQL Server CE 4 或 SQLite 进行集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5001142/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com