如何编写与数据库通信的单元集成测试。 e.g:
public int GetAppLockCount(DbConnection connection)
{
string query :=
"SELECT"+CRLF+
" tl.resource_type AS ResourceType,"+CRLF+
" tl.resource_description AS ResourceName,"+CRLF+
" tl.request_session_id AS spid"+CRLF+
"FROM sys.dm_tran_locks tl"+CRLF+
"WHERE tl.resource_type = 'APPLICATION'"+CRLF+
"AND tl.resource_database_id = ("+CRLF+
" SELECT dbid"+CRLF+
" FROM master.dbo.sysprocesses"+CRLF+
" WHERE spid = @@spid)";
IRecordset rdr = Connection.Execute(query);
int nCount = 0;
while not rdr.EOF do
{
nCount := nCount+1;
rdr.Next;
}
return nCount;
}
在这种情况下,我试图驱除这个错误代码(IRecordset
返回空记录集)。
[UnitTest]
void TestGetLockCountShouldAlwaysSucceed();
{
DbConnection conn = GetConnectionForUnit_IMean_IntegrationTest();
GetAppLockCount(conn);
CheckTrue(True, "We should reach here, whether there are app locks or not");
}
现在我需要的是在运行 unit 集成测试时连接到某些数据库的方法。
人们是否将连接字符串存储在某处以供测试运行者查找? .ini
或.xml
或.config
文件?
注意:语言/框架无关。该代码有意包含以下元素:
为了把这一点带回家。
答案 0 :(得分:1)
现在我需要的是在运行单元集成测试时连接到某个数据库的方法。
使用现有数据库或内存数据库。我已经尝试了当前使用的现有数据库,该数据库是使用ant文件中的Liquibase脚本进行拆分和重建的。 内存中的优点 - 不依赖于其他应用程序。 缺点 - 不太真实,需要时间才能启动。 真实数据库的优点 - 可以与现实世界相同 缺点 - 需要访问第三方机器。设置新用户的更多工作(即创建新数据库)
人们是否将连接字符串存储在某处以供测试运行者查找? .ini或.xml或.config文件?
叶氏。在C#中,我在java a .props文件中使用了.config文件。对于内存中,您可以将其放入版本控制中,因为对于每个人来说都是相同的,在某个地方运行真实数据库,每个用户都需要有不同的。
您还需要考虑种子数据。在Java中,我过去使用过dbUnit。不是最可读,但有效。现在我使用Ruby ActiveRecord任务。
你是如何开始的?首先,您可以重建数据库吗?你需要能够在走这条路之前实现自动化。
接下来,您应该为测试建立一个空白的本地数据库。我选择每个开发人员,其他一些团队分享,但不承诺。在.NET / MS SQL世界中,我认为在内存中很容易做到。