【发布时间】:2018-05-27 11:49:29
【问题描述】:
我已经使用 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 中拦截测试取消的方法。
【问题讨论】:
-
你可以在每次测试后运行 CleanupAllMockData() 吗?
-
@Kris,最初,我在 [TestCleanup] 中运行它,但注意到对性能有负面影响。测试运行需要 20 分钟 vs ~ 6 分钟,但同样,如果我取消测试,假货将不会被清理。
标签: c# integration-testing mstest dummy-data