执行回滚 - 存储库集成测试

Sib*_*Guy 17 .net c# database entity-framework

我想实现我的Entity Framework驱动的存储库的集成测试.问题是如何在测试完成后回滚数据库状态.目前我正计划在测试SetUp上启动事务并在测试TearDown时将其回滚.除手动数据库清除外,还有其他解决方案吗?

Ste*_*ven 23

我们在使用MSTest时在集成测试中执行此操作.我们TransactionScope在基类中使用并实现测试设置和拆解.这允许您在事务中运行所有集成测试.基类看起来很像这样:

public class IntegrationTestsBase
{
    private TransactionScope scope;

    [TestInitialize]
    public void Initialize()
    {
        this.scope = new TransactionScope();
    }

    [TestCleanup]
    public void TestCleanup()
    {
        this.scope.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

祝好运.

  • 好的,在测试中做repo.Save(someObject)后如何检查该对象是否已保存? (2认同)
  • @Peri 你创建 TransactionScope ala“return new TransactionScope(TransactionScopeOption.Required, new TransactionOptions{IsolationLevel = IsolationLevel.ReadUncommitted}。这样你就可以看到未提交的行:-) (2认同)

Kev*_*che 5

我认为你走在正确的轨道上......

这是一个与Linq To SQL相同的示例,您可以自己调整.

此链接描述了三个选项:

  • 交易
  • 重建数据库
  • 使用SQL Server快照

该帖子接着描述了最快的事务与单个会话相关联,并且可以创建一些真正的问题/限制.使用,如果你可以....

重建数据库很慢但绝对可行,但使用快照很快并且可以解决事务限制.

如果您需要在自动化测试中获得非常高的性能,请从同一个博客中尝试.他描述了使用MS Distributed Transaction Coordinator来消除单个会话的事务限制.