我在python程序中有一个函数,它执行两次函数调用:
def add_user(uname,dserver,pwd,dinstance,proc1, query1):
db_conn = db_connect(uname,dserver,pwd,dinstance)
if db_conn is not_conn:
print("Failed to connect")
sys.exit(-1)
db_conn.run_proc(proc1)
if db_conn.error_msg:
print("Failed procedure")
sys.exit(-1)
db_conn.run_query(query1)
if db_conn.err_msg:
print("Failed query")
sys.exit(-1)
现在单元测试如下:
@patch('mydir.proj_dir.db_execu.db_connect')
def test_add_user(self, mock_conn):
mock_conn.return_value.not_conn.return_value = True
mock_conn.return_value.run_proc.return_value = True
mock_conn.return_value.run_query.return_value = True
mock_conn.return_value.err_msg.side_effect= [True, False]
with self.assertRaises(SystemExit):
add_user(name,dserver,pwd,dinstance,proc1, query1)
print("failed query")
我的目标是测试第二个错误条件。但在添加副作用后,它只进入第一个条件,显示为“失败的过程”。我想测试“查询失败”条件。我已经测试了前两个错误条件,但第三个错误条件失败,并且总是调用第二个条件。请告知
你到底在问什么还不是很清楚。您只调用了一次
add_user
,所以您只测试了一个“路径”,您需要多次调用它来测试通过它的多个“路径”除此之外,在理解}和
mock
{side_effect
将mock配置为可调用的时存在一个很大的问题,当访问属性但不调用它们时,您只会得到链中的下一个mock,而不使用任何配置。mock还支持配置数据模型的一些“神奇方法”,但它不支持配置__getattr__
(“简单”属性访问),因为mock在内部使用这些方法因此,您应该只使用mock来修补/替换
db_connect
以返回伪连接,而不是使用mock,因为伪连接应该是一个伪:一个您自己构建的对象,它看起来像一个连接,但按照您想要的方式运行,例如然后您只需配置
mock_conn.return_value = PseudoConnection(True, False)
来测试第一种情况,配置mock_conn.return_value = PseudoConnection(False, True)
来测试第二种情况正如注释所暗示的,您正在访问
error_msg
和err_msg
,并且只尝试配置err_msg
。我不知道哪个是对的,但我怀疑两者都是对的相关问题 更多 >
编程相关推荐