以编程方式检测 python 代码是否正在测试

Bul*_*ula 3 python unit-testing python-unittest

python程序如何知道它是否正在被测试?例如:

def foo():
    if foo_being_tested:
        pseudorandom()
    else:
        random()
Run Code Online (Sandbox Code Playgroud)

在测试时,程序应使用伪随机序列,以便能够与程序的 C 代码版本进行比较,并且在常规执行中numpy应使用随机序列。

Mar*_*ers 6

如果不检查调用堆栈,您就不能这样做。

一般来说,你根本不应该这样做;通过在测试时更改代码,您没有正确测试代码。

相反,您可以使用模拟来替换代码使用的任何部分(被测试代码使用的任何部分,但不是它的一部分)。对于您的具体示例,您将模拟random(); 在 Python 3.3 及更高版本上,您可以使用,在 PyPI 上unittest.mock可用于其他 Python 版本,或者您可以在测试期间手动换出。mockmodule_under_test.random

您还可以在单​​元测试中设置一个环境变量,以明确您正在运行测试,但理想情况下应该避免这种情况。