集成测试垃圾数据

Integration testing garbage data

我已经使用 MSTest 设置了集成测试。我的集成测试创建假数据并将它们插入数据库(真正的依赖项)。对于每个业务对象,我都有一个这样的方法,它创建一个 "Fake" 并将其插入到数据库中:

public static EventAction Mock()
{
    EventAction action = Fixture.Build<EventAction>().Create();
    action.Add(false);
    AddCleanupAction(action.Delete);
    AppendLog("EventAction was created.");
    return action;
}

我清理了[AssemblyCleanup]中的所有假货:

public static void CleanupAllMockData()
{
    foreach (Action action in CleanUpActions)
    {
        try
        {
            action();
        }
        catch
        {
            AppendLog($"Failed to clean up {action.GetType()}. It is possible that it was already cleaned up by parent objects.");
        }
    }
}

现在,我遇到了一个大问题。在我的持续集成环境 (TeamCity) 中,我们有一个单独的数据库用于测试,它会在每次测试后自行清理 运行,但在我的本地环境中,集成测试指向我的本地数据库。现在,如果我出于任何原因取消测试 运行,就会在我的本地数据库中留下一堆垃圾数据,因为 CleanupAllMockData() 永远不会被调用。

处理此问题的最佳方法是什么?我找不到在 MSTest 中拦截测试取消的方法。

我看到有两个选项可以解决您的问题:

  1. 每次开始前清理模拟数据。仅在开始之前。
  2. 每个测试都包装为一个永远不会提交的数据库事务。我解释 这个选项 here