基本上我有连接到 SQLLite 数据库的集成测试。目前,我将“复制到输出目录”设置为始终复制,因为我希望每次运行集成测试时都将其重置。
然而,我的问题是一些测试对数据库进行了更改,是否有一种好方法可以用来在我运行每个测试之前重新复制数据库或重置数据库。
我显然会使用类中的 TestInitialize 或 TestCleanup 方法来执行此操作,但我正在努力想出实现此目的的好方法。
如果您需要更多信息,请告诉我。
编辑:我尝试了一下,我的想法是先标记需要重置的文件(这是在 ClassInit 阶段完成的),基本上这意味着我将保留一个文件列表并对其进行 .backup在这个初始初始化阶段。然后在每次单独测试之前,我将重置这将基本上删除文件,然后重新复制备份文件并将 .backup 放回 Assets 文件夹以再次启动该过程。它有点笨手笨脚,需要改进,但可能有用。如果有人可以对此进行改进,请告诉我:
public class TestAssetsHelper
{
private Lst<string> filesList;
public TestAssetsHelper(params string[] filesToWatchForResetting)
{
filesList = filesToWatchForResetting.Freeze();
MarkFilesToReset();
}
public void MarkFilesToReset()
{
filesList.Iter((source) =>
{
try
{
File.Copy(source, $"{source}.backup", true);
}
catch (IOException iox)
{
Console.WriteLine(iox.Message);
}
});
}
public void ResetMarkedFiles()
{
filesList.Iter((source) =>
{
try
{
if (File.Exists(source))
{
File.Delete(source);
}
File.Copy($"{source}.backup", source, true);
}
catch (IOException iox)
{
Console.WriteLine(iox.Message);
}
});
}
}