2

这是一个专门针对 Python 中的单元测试的通用问题。将 20 个或一些输入作为键在字典中进行测试是否可以接受,其中值是函数的预期结果输出?

我在网上搜索后找不到答案。我读到的几乎所有内容都是玩具示例,例如添加数字以获得总和或连接名字和姓氏。以下是另一个以简单方式描述我的问题的玩具示例。

import unittest
import some_module

class SomeModuleUnitTest(unittest.TestCase):

    def test_some_function(self):

        input_output_dict = {
            1: 1,
            2: 4,
            3: 9,
            4: 16,
            5: 25,
            6: 36,
            7: 49,
              .
              .
              .

            20: 400
        }

        for input_case, output_expected in input_output_dict.items():
            output_actual = some_module.some_function(input_case)
            self.assertEqual(output_expected, output_actual)

如果这被认为是过时的,那么用于测试多个输入的 Pythonic 解决方案是什么?

4

1 回答 1

2

好的,我会去的。试图回答我在这里看到的明确和隐含的问题。

它是pythonic吗? 如果那是您拥有的数据,那么将其放入字典中当然可以。如果它变得非常大,您可以考虑从文件中读取它,但在这种情况下可能不需要这样做。

这是测试多个输入的最佳方法吗?.
不,有可能在测试框架中使用测试参数化,提供比您的示例更好的组织输出。最常用的大概就是 pytest.mark.parametrizepytest中的装饰器了。

你在测试中需要那么多不同的输入吗?
这取决于您的功能。如果每个输入都代表不同的场景,当然可以。如果它们代表相同的场景,您可能会想到典型和边缘情况,但通常您不需要很多不同的输入。

于 2020-04-26T04:05:05.273 回答