如何从函数外部访问局部变量以对其进行测试

时间:2019-08-20 13:16:47

标签: python python-unittest

在为我的应用程序编写测试时,我要确保正确设置了函数内部的局部变量。

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

 model_checkpoint = torch.load(self.model_path, map_location='cpu')
 model = model_checkpoint['model']
 label_names = model_checkpoint['labels']

在上面的示例中,我对modellabel_names的值感兴趣,以检查加载过程是否成功。

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

1 个答案:

答案 0 :(得分:1)

您可以通过将其分为两个测试来执行此操作。一个测试加载函数,另一个通过将结果模拟到已知状态来使用结果测试该函数:

from unittest import TestCase, mock
import torch

class LoadTests(TestCase):
    test_load_model(self):
        expected = construct_test_model_here
        self.assertDictEqual(expected, torch.load("path/to/test/model/", map_location='cpu'))

    @mock.patch("torch.load")
    test_my_function(self, mock):
        mock.return_value = construct_test_model_here
        result = self.my_function()
        # check return value or side effects (better mock those too)

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