PyTest:测试if语句中调用了哪个函数

Ziv*_*iva 4 python testing pytest python-2.7

我有一个函数,它考虑三种不同的情况,并针对每种情况调用不同的函数,如下例所示

def my_fun(input):
 if input == 1:
    fun1()
 if input == 2:
    fun2()
 if input == 3:
    fun3()
Run Code Online (Sandbox Code Playgroud)

我想my_fun使用编写函数测试py.test,但我不知道如何测试是否为给定输入调用了正确的函数?

che*_*ner 5

正如 @fmarc 评论的那样,调用哪个函数并不重要,重要的是测试是否my_fun做正确的事情。但是,您可以模拟这三个函数中的每一个,然后测试是否独立于每个函数实际执行的操作而调用了正确的函数。(请注意,这mock是您需要安装的 Python 2 中的第 3 方模块;它可以作为 Python 3.3(?) 中的标准库使用unittest.mock。)

一个简单的例子:

import mock

def test_my_fun():
    with mock.patch('fun1', wraps=fun1) as mock_fun1:
        with mock.patch('fun2', wraps=fun2) as mock_fun2:
            with mock.patch('fun3', wraps=fun3) as mock_fun3:
                my_fun(1)
                mock_fun1.assert_called_with()
                mock_fun2.assert_not_called()
                mock_fun3.assert_not_called()
Run Code Online (Sandbox Code Playgroud)

检查安装文档mock以了解支持哪些方法。