使用Entity Framework时,我正在努力进行集成测试。
我在我的测试项目中使用测试数据为我的数据库播种,但我想知道你如何管理测试创建,更新和删除操作。
基本上我有我的测试数据,例如包含5个客户条目...我现在可以编写一些单元测试来获取基于这5个条目的数据。 (例如,get all将返回包含5个项目的集合。)
但是,如果我有一个删除1个客户的测试,这意味着GetAll测试将需要5个客户,但只返回4(如果此测试在删除测试后执行)并且失败。
您如何解决此问题?在每次测试之前,您是否为测试提供了某个订单或重新设置数据库(但这听起来很糟糕?)...
谢谢!
答案 0 :(得分:1)
执行此操作的有效方法是使用Transaction Scope。这基本上包装了所有sql调用,如果在不调用Complete方法的情况下处理作用域,则回滚更改。基本测试将如下所示。
public class TransactionalTestsBase
{
private TransactionScope _scope;
[TestInitialize]
public void Initialize()
{
_scope = new TransactionScope();
}
[TestCleanup]
public void TestCleanup()
{
_scope.Dispose();
}
[TestMethod]
public void CrudAction()
{
var repo = new YourRepo();
var client = ; // Make client
repo.DeleteClient(client);
Assert.AreEqual(4,repo.GetClients().Count());
}
}
理想情况下,您将继承此基础测试类,而不是在其中编写测试。
在测试中还有一些新的热量,我认为将来会有很大的帮助。看看Effort