我正在学习单元测试,但是我很难理解如何模拟单元测试函数。我已经复习了许多操作方法和示例,但是这个概念的传递还不够,我无法在代码中使用它。我希望在一个实际的代码示例中使用它会有所帮助。在
在这种情况下,我试图嘲笑isTokenValid。在
下面是我想模仿的示例代码。在
<in library file>
import xmlrpc.client as xmlrpclib
class Library(object):
def function:
#...
AuthURL = 'https://example.com/xmlrpc/Auth'
auth_server = xmlrpclib.ServerProxy(AuthURL)
socket.setdefaulttimeout(20)
try:
if pull == 0:
valid = auth_server.isTokenValid(token)
#...
在我的单元测试文件中
^{pr2}$我将如何模拟“函数”中列出的代码?Token可以是字符串形式的任何数字,valid应该是int(1)
首先,您可以并且应该模仿}都会导致相同的对象。在
xmlrpc.client.ServerProxy
;您的库将xmlrpc.client
作为一个新名称导入,但它仍然是相同的模块对象,因此库中的xmlrpclib.ServerProxy
和{接下来,看看对象是如何使用的,并查找calls,即
(..)
语法。库使用的服务器代理如下所示:因此这里有一个链,在这里调用mock,然后使用返回值来查找另一个也被调用的属性。在模拟时,您需要寻找相同的链;为此使用^{} attribute 。默认情况下,调用mock时会返回一个新的mock实例,但您也可以设置测试值。在
所以要测试代码,您需要影响
auth_server.isTokenValid(token)
返回的内容,并测试代码是否正常工作。您可能还想断言正确的URL被传递到ServerProxy
实例。在为不同的结果创建单独的测试。可能令牌在一种情况下有效,而在另一种情况下无效,您需要测试这两种情况:
^{pr2}$有许多mock attributes要使用,您可以稍微更改补丁装饰器的用法,如下所示:
您可以调整上面的代码以满足您的需求。在
相关问题 更多 >
编程相关推荐