首页 > 解决方案 > 如何为此代码编写 pytest(在 TDD 中)计算数组中的最大元素?

问题描述

此代码一直读取输入,直到给出 0。这些数字放在数组 l 中。我想计算最大元素。

#main.py
if __name__ == "__main__":

    l = list()

    while True:
        x = int(input())
        if x == 0:
            break
        else:
            l.append(x)

    maxi = max(l)
    count = 0
    for i in range(len(l)):
        if l[i] == maxi:
            count += 1
    print(count)

如何为此编写pytest?实际上是2个测试。我希望它具有良好的 TDD 方式。

第一个测试用例:1 7 9 0 答案应该是 1

第二个测试用例:1 3 3 1 0 答案应该是 2

对于第一种情况:

import pytest


from main import main_function


assert(main_function([1, 7, 9, 0])) == 1

我不知道如何让我的测试用例像实际函数 main.py 一样接受输入

标签: pythonunit-testingpytest

解决方案


pytest 的测试方法和普遍接受的最佳工程实践是将计算最大元素计数的逻辑与从命令行读取输入的逻辑分开。

这使您可以count_of_highest_element通过传递各种列表并断言结果来进行测试。这也使您可以在其他地方重用逻辑。

您需要进行额外的测试以确保接受命令行输入的函数运行正常。存在一些关于如何正确执行此操作的问题。

注意我建议阅读 Pytest 的工作原理。测试旨在成为正确命名的函数和类的集合,而不是原始断言。请注意,您的测试脚本实际上并未使用从 Pytest 模块导入的任何内容。


推荐阅读