集成测试实体框架CRD操作

时间:2013-04-01 13:50:10

标签: entity-framework integration-testing crud

使用Entity Framework时,我正在努力进行集成测试。

我在我的测试项目中使用测试数据为我的数据库播种,但我想知道你如何管理测试创建,更新和删除操作。

基本上我有我的测试数据,例如包含5个客户条目...我现在可以编写一些单元测试来获取基于这5个条目的数据。 (例如,get all将返回包含5个项目的集合。)

但是,如果我有一个删除1个客户的测试,这意味着GetAll测试将需要5个客户,但只返回4(如果此测试在删除测试后执行)并且失败。

您如何解决此问题?在每次测试之前,您是否为测试提供了某个订单或重新设置数据库(但这听起来很糟糕?)...

谢谢!

1 个答案:

答案 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