Python 如何从函数外部访问局部变量以测试它们

Python 如何从函数外部访问局部变量以测试它们,python,python-unittest,Python,Python Unittest,在为应用程序编写测试时,我希望确保函数中的局部变量设置正确 因此,我想知道是否有一种方法可以在运行测试时捕获这些变量,因为被测试的函数没有返回值,我不想更改它 model\u checkpoint=torch.load(self.model\u路径,map\u location='cpu') 模型=模型检查点['model'] label\u names=模型\u检查点['labels'] 在上面的示例中,我对model和label\u names的值感兴趣,以检查加载过程是否成功 有没有办法

在为应用程序编写测试时,我希望确保函数中的局部变量设置正确

因此,我想知道是否有一种方法可以在运行测试时捕获这些变量,因为被测试的函数没有返回值,我不想更改它

model\u checkpoint=torch.load(self.model\u路径,map\u location='cpu')
模型=模型检查点['model']
label\u names=模型\u检查点['labels']
在上面的示例中,我对
model
label\u names
的值感兴趣,以检查加载过程是否成功

有没有办法做到这一点?
提前非常感谢

您可以通过将其分为两个测试来实现这一点。一个测试加载函数,另一个通过将其模拟到已知状态来使用结果测试函数:

从unittest导入测试用例,模拟
进口火炬
类装入测试(TestCase):
测试负载模型(自):
预期=此处构造测试模型
self.assertDictEqual(预期为torch.load(“path/to/test/model/”,map_location='cpu'))
@模拟补丁(“火炬装载”)
测试我的功能(自我、模拟):
mock.return\u value=此处构造\u测试\u模型
结果=self.my_函数()
#检查返回值或副作用(最好也模拟这些)

通常,您不能直接观察局部变量,但如果它们的值是在其他地方构造的,您可以模拟该外部构造的返回值。

为什么要测试
torch
的代码?我假设它是有效的,因为它是一个非常流行的包。局部变量是一个实现细节。只要函数具有正确的返回值和/或副作用,它们的值是什么并不重要:这些是您想要测试的。抛开您的推理不谈,在测试框架中,如
unittest
pytest
中,没有简单的方法可以查看函数的局部变量。我认为,只要您不想为了使测试成为可能而更改代码(您不应该这样做),就很难实现。