如何测试有副作用的功能?

时间:2018-01-16 10:41:41

标签: testing functional-programming side-effects

给定一个对数据库执行某些操作的函数。

在python中,它看起来如下:

def dao_transfer(cnx, account_id1, account_id2, money):
   spam = cnx.execute('query 1', account_id1)
   egg = cnx.execute('query 2', account_2, spam)
   return egg

我在单元测试中所做的是模拟cnx对象,并且只检查 调用cnx.execute并且dao_transfer返回最后一次模拟返回值cnx.execute

我觉得这种测试很差。

Django做的是,它不是与数据库交互的单元测试函数,而是做我所谓的集成测试,即。你产生一个完整的数据库,你用一些初始数据加载它,执行你的副作用驱动的函数,并检查数据库是否处于正确的状态。

我能做到这一点,但我更喜欢单元测试。是否存在单元测试副作用函数的方法,它不依赖于检查每个单个副作用函数调用参数?

是否有纯粹的IO方法可以进行更好的单元测试?

0 个答案:

没有答案