Unit testing Python3单元测试:当返回值在范围内时断言True,并正确计数
我很难为以下函数编写单元测试:Unit testing Python3单元测试:当返回值在范围内时断言True,并正确计数,unit-testing,python-3.x,python-unittest,Unit Testing,Python 3.x,Python Unittest,我很难为以下函数编写单元测试: def white_nums(): """Generate 5 'white ball' numbers between 1 and 69--inclusive, no duplicates""" whites = random.sample(range(1, 69 + 1),5) # Python range stops at y - 1 in range(x, y) return(', '.join(map(str, whites))
def white_nums():
"""Generate 5 'white ball' numbers between 1 and 69--inclusive, no duplicates"""
whites = random.sample(range(1, 69 + 1),5) # Python range stops at y - 1 in range(x, y)
return(', '.join(map(str, whites))) # strip non-integer characters, separate numbers with commas
我的想法是,我至少需要测试以下几点:
- 返回的值是否在定义的范围内
- 返回值的计数==5
- 返回的值不重复
- 返回的值由非整数字符分隔,并用逗号分隔
我致力于学习Python的
unittest
模块,并感谢您的帮助 请澄清以下几点:
- 所有的值都是硬编码的,那么以后需要在哪里进行测试呢? 这仅仅是你想要的一个想法,然后你将传递range_min(1)range_max(69)和white_balls(5)作为参数
whites = random.sample(range(1, 69 + 1),5)
但是为什么要返回一个字符串而不是一个列表呢
总之,虽然单元测试通常是一种非常好的实践,但如果您保留硬编码的值,则似乎没有必要
这只是一个例子:
import unittest
import random
def white_nums(range_min, range_max, balls):
return set(random.sample(range(range_min, range_max + 1), balls))
class TestWhiteNums(unittest.TestCase):
def setUp(self):
self.range_min = 1
self.range_max = 69
self.balls = 5
self.white_balls = white_nums(self.range_min, self.range_max, self.balls)
def test_count(self):
self.assertEqual(len(self.white_balls), self.balls)
def test_range(self):
for white_ball in self.white_balls:
self.assertGreaterEqual(white_ball, self.range_min)
self.assertLessEqual(white_ball, self.range_max)
def test_duplicates(self):
self.assertEqual(self.white_balls, set(self.white_balls))
if __name__ == '__main__':
unittest.main()
当然,setUp()函数可能更复杂,从其他地方获取值。在实际代码中,您可以直接将white_balls列表添加到表中,我认为无需将其转换为字符串。好的,更大的情况是返回的值将插入到表中。说实话,我不清楚什么是单元测试的公平游戏,什么不是。您不需要返回字符串就可以将其添加到表中。
return(','.join(map(str,whites))
的目的是删除由random.
生成的括号[]
。这样做是为了美观,不是出于必要。如果是这样,我建议您在生成表时在white_nums函数之外进行预处理,因此您将有一个适当的关注点分离。逻辑部分和表示部分。您可以为后面的函数创建一个函数,其中包含所有其他函数返回的数据的所有必要转换,这个函数将在最后返回或打印您的表。谢谢,这是一个很好的建议。请问:在这种情况下,表的单元测试是什么样子的?