我是一个学习Python的CS入门类的TA,我想知道是否有一种方法可以在一个文件夹中的多个.py文件上运行一个单元测试文件。
例如,如果我创建Homework1UnitTest.py并希望它在C:/User/Lien/Desktop/StudentSubmissionsHW1文件夹中的所有.py文件上运行,我将如何做到这一点?
StudentSubmissionsHW1中填充了诸如: jsmithhw1.py bjoneshw1.py sscotthw1.py等.py文件。
此外,当我学习单元测试时,我读到了将冗长的参数传递给单元测试调用的文章。有什么类似的东西,我可以看到所有的测试失败了吗?
例如,如果我有这样的东西:
def test_is_int(self):
self.assertEqual(is_int("-51"), True)
self.assertEqual(is_int("-5.1"), False)
self.assertEqual(is_int("5.1"), False)
self.assertEqual(is_int("51"), True)
self.assertEqual(is_int("0"), True)
self.assertEqual(is_int("-5-4"), False)
self.assertEqual(is_int("5..1"), False)
self.assertEqual(is_int("5-"), False)
self.assertEqual(is_int("5f"), False)
self.assertEqual(is_int("-"), False)
我可以设置我的结果来显示所有失败的assertEqual()函数,而不仅仅是第一个函数吗?
谢谢!
发布于 2015-09-18 17:33:35
是的,discover
特性正是用这个用例设计的:
cd project_directory
python -m unittest discover
默认情况下,它将只在与模式test*.py
匹配的文件上运行,但如果希望它在每个.py文件上运行,则可以这样做:
python -m unittest discover -p "*.py"
关于第二个问题,失败的第一个断言甚至会阻止函数中的其他测试运行;如果需要更多的粒度,最好为每个断言创建一个单独的测试函数,如所述的这里。
更新:重新阅读您的问题,听起来您有一个单一的测试文件,但希望在多个文件上运行这些单元测试。如何做到这一点将取决于对特定用例在文件上运行它需要什么。但是,如果您的意思是这些文件有一些您希望作为每个测试用例的附加“参数”的输入,一种方法是将每个测试嵌套在一个for循环中,该循环遍历目录中的所有文件。我以前做过的另一件事是设置一个装饰器,它将在所有修饰方法上为您自动设置这个for循环,例如:
def all_files(func):
def wrapped(self, **kwargs):
root = 'C:\Users\Lien\Desktop\StudentSubmissionsHW1'
kwargs.pop('filepath',None)
for filepath in glob.glob(os.path.join(root, '*.py')):
func(self, filepath=filepath, **kwargs)
return wrapped
然后你可以像这样用它:
class TestStringMethods(unittest.TestCase):
@all_files
def test_is_int(self, filepath=None):
# run your test(s) using file filelpath...
with open(filepath) as fobj:
self.assertEqual(fobj.read().strip(), 'foobar')
https://stackoverflow.com/questions/32657661
复制相似问题