我正在尝试将单元测试应用于正在处理的项目。我使用Python和MySQLdb工作,但我认为这个讨论是与语言无关的。 我想测试一个函数,我们称之为foobar()。它执行与以下类似的SQL查询:数据库连接是否应该被模拟?
cursor.execute("SELECT * FROM my_table WHERE a == " +varA+ " AND b < " +varB)
函数中存在一点点复杂性。 cursor.execute(query)
被调用的方式和频率取决于foobar的参数。
现在我不确定是否应该模拟数据库连接cursor
。 如果我不这样做,这很糟糕,因为测试取决于数据库服务器的可用性。 如果我这样做,这很糟糕,因为模拟必须知道哪些查询将被调用。但确切的查询是一个实现细节。例如。查询是写成小写还是大写不影响foobar的正确性。但改变这将打破测试。由于有些复杂的模拟对象,测试也很难阅读。
这是选择较小的邪恶?有第三种方法吗?
只有当这个话题很大时才有这么小的问题? – hakre