Python unittest 传递参数

标签 python unit-testing

在 Python 中,如何将参数从命令行传递给 unittest 函数?

这是目前的代码……我知道这是错误的。

class TestingClass(unittest.TestCase):

    def testEmails(self):
        assertEqual(email_from_argument, "my_email@example.com")


if __name__ == "__main__":
    unittest.main(argv=[sys.argv[1]])
    email_from_argument = sys.argv[1]

最佳答案

所以这里的医生说“你说那很痛?那就不要那样做!”可能是对的。但如果你真的想要,这里有一种将参数传递给单元测试测试的方法:

import sys
import unittest

class MyTest(unittest.TestCase):
    USERNAME = "jemima"
    PASSWORD = "password"

    def test_logins_or_something(self):
        print('username:', self.USERNAME)
        print('password:', self.PASSWORD)


if __name__ == "__main__":
    if len(sys.argv) > 1:
        MyTest.USERNAME = sys.argv.pop()
        MyTest.PASSWORD = sys.argv.pop()
    unittest.main()

这会让你运行:

python mytests.py myusername mypassword

您需要 argv.pops,因此您的命令行参数不会与 unittest 自己的...

您可能想要研究的另一件事是使用环境变量:

import os
import unittest

class MyTest(unittest.TestCase):
    USERNAME = "jemima"
    PASSWORD = "password"

    def test_logins_or_something(self):
        print('username:', self.USERNAME)
        print('password:', self.PASSWORD)

if __name__ == "__main__":
    MyTest.USERNAME = os.environ.get('TEST_USERNAME', MyTest.USERNAME)
    MyTest.PASSWORD = os.environ.get('TEST_PASSWORD', MyTest.PASSWORD)
    unittest.main()

这会让你运行:

TEST_USERNAME=ausername TEST_PASSWORD=apassword python mytests.py

它的优点是你不会弄乱 unittest 自己的参数解析。缺点是它不会像在 Windows 上那样工作......

关于Python unittest 传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11380413/

相关文章:

python - 如何避免用下划线标记单词?

c# - Moq ReturnsAsync() 带参数

c# - 如何模拟(或不模拟)IDbConnection 进行测试?

unit-testing - 无法在单元测试中运行远程功能

unit-testing - 有没有一种简单的方法可以有条件地启用或忽略 Rust 中的整个测试套件?

python - AttributeError: 'str' 对象在 python 中没有属性 'seek'

python - 优化python中的双循环

python - 组合 2 个不同元组的值的最佳方法

python - 为什么 pandas Series.apply 和 DataFrame.applymap 得到不同的结果?

c++ - Boost::Test 的问题