0

使用实体框架时,我正在为集成测试而苦苦挣扎。

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

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

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

你如何解决这个问题?您是否在每次测试之前为您的测试指定特定顺序或重新设置数据库(但这听起来很糟糕?)...

谢谢 !

4

1 回答 1

1

一个有效的方法是使用Transaction Scope。如果在未调用 Complete 方法的情况下释放了范围,这基本上会包装所有 sql 调用并回滚更改。基本测试将如下所示。

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

理想情况下,您将从这个基础测试类继承而不是在其中编写测试。

测试版中仍有一些新的热度,我认为这将在未来对此有很大帮助。看看努力

于 2013-05-01T09:16:31.407 回答