我有一个带有许多 sql 插入的 Setup 方法。此方法在每个 Test 方法之前调用。
我添加到我的数据库中的表越多,Setup 方法就越大,并且它难以概述和维护。
有时我认为我应该为每个测试方法创建一个私有设置方法,这样每个测试方法的插入数据会更少,但通常它会比以前的设置方法更多的 sql 插入。
通常我也不需要在特定测试的设置方法中插入一些 sql。因此,我不能轻易说出哪种设置数据适用于哪种测试方法。
你发现什么是好方法?
我有一个带有许多 sql 插入的 Setup 方法。此方法在每个 Test 方法之前调用。
我添加到我的数据库中的表越多,Setup 方法就越大,并且它难以概述和维护。
有时我认为我应该为每个测试方法创建一个私有设置方法,这样每个测试方法的插入数据会更少,但通常它会比以前的设置方法更多的 sql 插入。
通常我也不需要在特定测试的设置方法中插入一些 sql。因此,我不能轻易说出哪种设置数据适用于哪种测试方法。
你发现什么是好方法?
考虑使用文件资源(准确地说是 sql 脚本)。将 SQL 存储为类中的字符串通常最终会成为可维护性的噩梦。
在我的 C# 项目中,我通常做的是:
并在测试开始之前/之后运行它们(尽管在测试方法主体内)。例如(伪代码):
public void DeleteClient_DeletesClientAndOrderHistory()
{
ExecuteSql(Resources.Scripts.DeleteClientTest_SetupScript);
// perform test
ExecuteSql(Resources.Scripts.DeleteClientTest_TeardownScript);
}
当然,您可以使用catch-finally
其他类型的还原到起点的安全机制来包装此类构造并确保它们。然而,这将对测试执行时间产生相当大的影响。您可以考虑两个额外的选项:
自然,您必须检查您的框架是否支持此类方法(例如,NUnit 支持(class-wide) (assembly/namespace-wide)属性)。[TestFixtureSetup]
[SetUpFixture]