从另一个脚本进行单元测试传递参数

时间:2018-08-13 06:32:50

标签: python unit-testing arguments

因此,这是一个从Web服务运行的非常简单的脚本:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys

test=int(sys.argv[1])+int(sys.argv[2])
print(test)

,现在我想编写一个Unittest脚本来测试该脚本,但是我不知道如何在unittest函数中传递2个必需的参数。这是我当前的代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import unittest
import ExecuteExternal

class TestUnittest(unittest.TestCase):

    def test(self):
       self.assertTrue(ExecuteExternal, "5", "5"==10)

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

我确实在论坛上进行过搜索,但找不到答案

2 个答案:

答案 0 :(得分:1)

您可以纠缠sys args,但首选方法是将逻辑包装在函数中,然后在脚本中对函数调用进行典型的 main 检查。

您可以在单元测试中导入脚本并调用函数,而不必破坏脚本。

这是脚本的未经测试的版本:

# -*- coding: utf-8 -*-

import sys

def calc(a, b):
    return int(a)+int(b)

if __name__ == "__main__":
    print(calc(sys.argv[1], sys.argv[2]))

假设您的脚本名为ExecuteExternal.py,那么您的测试脚本将运行:

# -*- coding: utf-8 -*-

import unittest
import ExecuteExternal

class TestUnittest(unittest.TestCase):

    def test(self):
        result = ExecuteExternal.calc("5", "6")
        self.assertTrue(result, 11)

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

答案 1 :(得分:0)

此外,您应该注意脚本的命名约定。参见https://www.python.org/dev/peps/pep-0008/#package-and-module-names

的PEP8