python - 如何为此代码编写 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 一样接受输入
解决方案
pytest 的测试方法和普遍接受的最佳工程实践是将计算最大元素计数的逻辑与从命令行读取输入的逻辑分开。
这使您可以count_of_highest_element
通过传递各种列表并断言结果来进行测试。这也使您可以在其他地方重用逻辑。
您需要进行额外的测试以确保接受命令行输入的函数运行正常。存在一些关于如何正确执行此操作的问题。
注意我建议阅读 Pytest 的工作原理。测试旨在成为正确命名的函数和类的集合,而不是原始断言。请注意,您的测试脚本实际上并未使用从 Pytest 模块导入的任何内容。
推荐阅读
- node.js - 使用 Node.js API 中的 PUT 更新 MongoDB 文档
- reactjs - 在 create-react-app 中意外使用事件
- android - 我可以在 GridLayoutManager 中以百分比设置列的宽度吗?
- azureservicebus - 具有服务总线自定义触发器的逻辑应用
- uwp - StorageFile 类型不在 Windows.Storage 中
- javascript - react.js antd modal错误行为
- javascript - Express 路由错误,'Router.post 需要回调函数'
- php - PHP循环在本地主机上工作,但在服务器上
- r - Caret 包不适用于 3.4.2 版
- c# - .NET 浮点运算在 x64 调试和发布之间是否一致?