我正在用python构建一个应用程序,它使用对执行硬件通信的库的包装
我想创建一些测试单元,而且我对单元测试还很陌生,所以我想模拟通信,但我真的不知道怎么做
快速示例:
这是使用comm lib的应用程序代码
def changeValue(id, val):
current_value = comm.getval(id)
if (current_value != val):
comm.send(id, val)
我想在不进行通信的情况下进行测试,即更换通信获取值返回一些模拟值,并发送通信发送一个模仿的通信类。你知道吗
有人能给点提示吗?你知道吗
问题是comm是类中的一个对象
假设这个班是这样的:
class myClass:
comm = Comm()
....
def __init__():
comm = comm.start()
def changeValue(id, val):
....
....
您可以使用^{} 框架来处理此类作业。首先你要用
comm = Comm()
在MyClass
中,这意味着在MyClass
的模块中有类似于from comm_module import Comm
的东西。在这些情况下,您需要修补Comm
模块中的MyClass
引用以激活修补程序。你知道吗因此,可以举一个例子来说明如何在没有任何连接的情况下测试代码:
现在我可以开始解释我的答案的所有细节,比如为什么要使用^{} 或how to apply patch to all methods,但这意味着要重写很多
mock
文档和一些答案。所以我希望这足够作为起点。你知道吗诀窍是不要使用像
comm
这样的全局对象。如果可以的话,让调用方将comm
注入到类或方法中。然后在测试时通过模拟的comm
,然后在生产时通过真实的。你知道吗因此,要么像这样对类中的字段进行
comm
引用(并通过构造函数或setter方法注入它)或者在使用它的方法中将其作为参数,如下所示
使用globalanything会让嘲弄变得非常痛苦,当你需要嘲弄某样东西时,试着使用Dependency Injection。你知道吗
这是另一个关于DI的好帖子。它在java中,但在python中应该是相同的http://googletesting.blogspot.ca/2008/07/how-to-think-about-new-operator-with.html
相关问题 更多 >
编程相关推荐