首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对目录中的所有文件运行单元测试?

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

Stack Overflow用户
提问于 2015-09-18 17:18:15
回答 1查看 926关注 0票数 3

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

例如,如果我创建Homework1UnitTest.py并希望它在C:/User/Lien/Desktop/StudentSubmissionsHW1文件夹中的所有.py文件上运行,我将如何做到这一点?

StudentSubmissionsHW1中填充了诸如: jsmithhw1.py bjoneshw1.py sscotthw1.py等.py文件。

此外,当我学习单元测试时,我读到了将冗长的参数传递给单元测试调用的文章。有什么类似的东西,我可以看到所有的测试失败了吗?

例如,如果我有这样的东西:

代码语言:javascript
运行
复制
  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()函数,而不仅仅是第一个函数吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-09-18 17:33:35

是的,discover特性正是用这个用例设计的:

代码语言:javascript
运行
复制
cd project_directory
python -m unittest discover

默认情况下,它将只在与模式test*.py匹配的文件上运行,但如果希望它在每个.py文件上运行,则可以这样做:

代码语言:javascript
运行
复制
python -m unittest discover -p "*.py"

关于第二个问题,失败的第一个断言甚至会阻止函数中的其他测试运行;如果需要更多的粒度,最好为每个断言创建一个单独的测试函数,如所述的这里

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

代码语言:javascript
运行
复制
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

然后你可以像这样用它:

代码语言:javascript
运行
复制
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')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32657661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档