gpt4 book ai didi

python - 我如何在 Python 中对随机洗牌操作进行单元测试?

转载 作者:行者123 更新时间:2023-12-03 17:09:09 25 4
gpt4 key购买 nike

我已经编写了代码来从 .csv 文件创建一个 secret 圣诞老人列表,其中包含一组名称和相应的电子邮件。

import random
import pandas as pd

def compare(list_of_names, list_of_emails):
zipped_lists = list(zip(list_of_emails, list_of_names))
random.shuffle(zipped_lists) # shuffle list of emails and names
result = []
shuffled_emails = [i[0] for i in zipped_lists]
for i, _ in enumerate(shuffled_emails):
result.append(zipped_lists[i-1][1]) # shift email relatively one position to the right
return list(zip(result, shuffled_emails))

def main():
names = ["John", "Bob", "Alice"]
emails = ["John@gmail.com", "Bob@gmail.com", "Alice@outlook.com"]

print(compare(names,emails))

if __name__ == '__main__':
main()
我如何对这段代码进行单元测试,因为我使用的是随机洗牌操作?我不确定如何为相同的测试用例编写测试用例。

最佳答案

一种常见的方法是在测试中植入随机数生成器,生成数据集并手动验证。然后,该测试将用作回归测试,以确保实现没有改变。如果实现确实发生了变化,您将被迫重新生成数据集并手动重新验证。
例如:

def test_compare():
seed = 0xBEEF
names = ['Alice', 'Bob', 'Cuthbert', 'Daisy', 'Ethelred']
emails = [f'{n}@company.com' for n in names]

expected = [('Alice', 'Cuthbert@company.com'), ('Cuthbert', 'Bob@company.com'), ('Bob', 'Daisy@company.com'), ('Daisy', 'Ethelred@company.com'), ('Ethelred', 'Alice@company.com')]

random.seed(seed)

#k = list(zip(emails, names))
#random.shuffle(k)
#print(k)

assert compare(names, emails) == expected

test_compare()
我第一次运行测试时,我运行了注释掉的行而不是断言,并手动构建了列表 expected .之后,断言应该通过,直到您更改种子或 compare 的实现。 .
从更广泛的意义上讲,您试图断言关于您正在测试的函数的某些确定性。随机种子的存在正是为了使这成为可能。由于您没有测试 random.shuffle 的属性,使用一堆硬编码的数量是完全没问题的。

关于python - 我如何在 Python 中对随机洗牌操作进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67155178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com