如何对目录中的所有文件运行单元测试?

2024-05-14 21:05:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个学习Python的入门CS类助教,我想知道是否有一种方法可以在文件夹中的多个.py文件上运行一个单元测试文件。在

例如,如果我做家庭作业1UnitTest.py我希望它能在C:/Users/Lien/Desktop/StudentSubmissionsHW1文件夹中的所有.py文件上运行,我该怎么做?在

studentpy文件填充了shw1: jsmithhw1.py bjonesh1.py sscotthw1.py 等等。在

另外,当我学习单元测试时,我读到了关于向unittest调用传递冗长参数的内容。有没有类似的东西可以让我看到所有失败的测试?在

例如,如果我有类似的东西:

  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()函数而不是第一个函数吗?在

谢谢!在


Tags: 文件方法函数pyself文件夹falsetrue
1条回答
网友
1楼 · 发布于 2024-05-14 21:05:42

是的,^{}特性是根据以下用例设计的:

cd project_directory
python -m unittest discover

{{py>如果你想在这个文件上运行},那么默认情况下你可以在这个文件上运行

^{pr2}$

至于您的第二个问题,第一个失败的断言将阻止函数中的其他测试运行;如果您需要更高的粒度,您最好为每个断言创建一个单独的测试函数,如here

更新:重新阅读您的问题,听起来您有一个单一的unittest文件,但希望在多个文件上运行这些unittests。如何做到这一点取决于在文件上运行它对您的特定用例意味着什么。但是,如果您的意思是这些文件有一些输入,您希望这些输入作为每个测试用例的附加“参数”,一种方法是将每个测试嵌套在一个forloop中,该循环遍历目录中的所有文件。我以前做过的另一件事是设置一个decorator,它将自动为您在所有修饰方法上设置此forloop,例如:

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')

相关问题 更多 >

    热门问题