首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在单元测试中使用How解析参数调用函数?

如何在单元测试中使用How解析参数调用函数?
EN

Stack Overflow用户
提问于 2021-01-25 14:42:50
回答 1查看 158关注 0票数 0

请帮助我编写单元测试:

我有一个简单的程序,只有一个函数,当运行带有a解析参数--double的程序时,它只返回双倍的“名称”。否则返回一个名称。

代码语言:javascript
运行
复制
    # code.py
    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument("name")
    parser.add_argument('-d', '--double', action="store_true")
    
    args = parser.parse_args()
    
    def double_name(new_name):
      if args.double:
        return new_name + new_name
      else:
        return new_name
    
    print(double_name(args.name))

我有一个结果:test-name

  • run in cmd python code.py test-name -d我有一个结果:test-nametest-name

我想编写unittest来检查这个函数,但是我不知道如何在单元测试中使用how解析参数调用这个函数。

代码语言:javascript
运行
复制
    # test_code.py
    import unittest
    import code
    
    class Test_Code(unittest.TestCase):
    
      def test_double_name(self):
        # without -d
        self.assertEqual(code.double_name('test-name'), 'test-name')
        # with -d
        self.assertEqual(code.double_name('test-name'), 'test-nametest-name')
    
    if __name__ == "__main__":
      unittest.main()

这个测试应该如何看待run命令?如果我添加到代码中:

代码语言:javascript
运行
复制
    code.args = code.parser.parse_args(["test-name", "-d"])

标准命令python -m unittest test_code.py raise python -m unittest test_code.py

AttributeError:‘模块’对象没有属性'py'

EN

回答 1

Stack Overflow用户

发布于 2021-01-25 14:48:11

您可以使用自己的参数列表调用parse_args,让它生成一个可供使用的适当值。这需要稍微重写code,以避免在导入时调用parse_arg

代码语言:javascript
运行
复制
# code.py
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("name")
parser.add_argument('-d', '--double', action="store_true")


def double_name(new_name):
  if args.double:
    return new_name + new_name
  else:
    return new_name


if __name__ == "__main__":
    args = parser.parse_args()
    print(double_name(args.name))

然后

代码语言:javascript
运行
复制
# test_code.py
import unittest
import code


class Test_Code(unittest.TestCase):

  def test_double_name(self):
    code.args = code.parser.parse_args([])
    self.assertEqual(code.double_name('test-name'), 'test-name')

    code.args = code.parser.parse_args(["-d"])
    self.assertEqual(code.double_name('test-name'), 'test-nametest-name')


if __name__ == "__main__":
  unittest.main()

在测试函数中,需要确保设置code.args的值,因为这是code.double_name使用的变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65886922

复制
相关文章

相似问题

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