我目前正在为Python微博库编写一组单元测试,并且此处收到的建议已经开始使用模拟对象来返回数据,就好像来自服务(在本例中为identi.ca)。
然而,肯定是通过模拟httplib2 - 我用来请求数据的模块 - 我将单元测试绑定到我的库的特定实现,并删除它们在重构后运行的能力(这显然是一个主要的好处在第一个地方进行单元测试。)
这两种情况都是最好的吗?我唯一能想到的就是设置一个微博服务器,仅用于测试,但这显然是一项大量的工作。
答案 0 :(得分:1)
不确定您的问题是什么。模拟类是测试的一部分,至少在概念上是这样。测试可以依赖于它们注入到被测试代码中的模拟对象的特定行为。当然,注入本身应该在单元测试中共享,因此很容易更改模型实现。
答案 1 :(得分:1)
你是对的,如果你重构你的库以使用除httplib2以外的东西,那么你的单元测试将会中断。这不是一个可怕的依赖,因为当那个时候到来,改变你的测试以模拟新的库将是一件简单的事情。
如果你想避免这种情况,那么在httplib2周围编写一个非常小的包装器,你的测试可以模拟它。然后,如果你从httplib2转移,你只需要更改你的包装器。但请注意,您必须更改的行数是相同的,所有更改的是它们是“测试代码”还是“非测试代码”。