【问题标题】:python, unittest, test a script with command line argspython,unittest,使用命令行参数测试脚本
【发布时间】:2012-10-09 23:41:27
【问题描述】:

我编写了一个 python 脚本,它接受命令行参数并玩一轮井字游戏。
运行它看起来像这样......

运行 ttt o#xo##x## x 0 1

如果移动是合法的,那么它会打印新的棋盘布局以及是否有人赢得了比赛

我必须使用 unittest 为它编写测试。我不知道如何使用各种命令行参数测试整个脚本,我看到的所有示例似乎都只是测试脚本中的各个函数。 该脚本还使用argparse 来解析参数

谢谢!

【问题讨论】:

标签: python unit-testing parameters


【解决方案1】:

重构您的程序,使其主要操作(减去 argparsing)发生在“main”函数中:

def main(args):
    ...

if __name__ == '__main__':
    args = parse_args()
    main(args)

然后您可以为mainparse_args 的行为编写测试。

附言。可以使用subprocess模块将你的程序作为外部进程调用,然后解析输出,但我认为这样会更丑陋且没有必要。

PPS。以这种方式编写程序的另一个好处是,您可以将程序作为模块导入,并在其他脚本中调用它的 main 函数。例如,如果有一天您想为它构建一个 GUI,这可能会很有用。

【讨论】:

  • 如果您的脚本只有一个命令行端点(OP 就是这种情况),则此方法有效。如果您有多个端点,则必须使用不同的策略。
  • 或者最好不要将任何变量传递给main 方法。以防万一您需要使用 main 方法作为控制台脚本的入口点。然后在主通道sys.argv[1:] 内传递给第二种方法,我们将其命名为core。现在您可以对core 方法进行单元测试。
猜你喜欢
  • 2011-09-26
  • 2017-10-29
  • 2010-12-12
  • 2015-01-18
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
相关资源
最近更新 更多