Tan*_*eer 6 python unit-testing environment-variables
没有环境变量,我们知道,调用是: python -munittesttests.unit_test_1
但我需要传递环境变量,因为我需要将一些值插入到我拥有信用的数据库中。我不想将其写入 config/.py 文件中,只想将它们作为环境变量传递。因此,如果我将环境变量传递为:
python -m unittest tests.unit_test_1 $username $password
Run Code Online (Sandbox Code Playgroud)
编辑:
unit_test_1.py 大致如下:
import unittest
from sys import argv
from os import environ
class database_helper_tests(unittest.TestCase):
def fetch(this):
x = connet_to_database(environ["username"], environ["password"])
data = x.fetch_from_database(this)
expected_output = ...
self.assertEqual(expected_output, data)
if __name__ == "__main__":
os["username"] = argv[1]
os["password"] = argv[2]
unittest.main()
Run Code Online (Sandbox Code Playgroud)
第一个测试通过。然后我得到的错误是:
ModuleNotFoundError: No module named 'username"
ModuleNotFoundError: No module named 'password"
Run Code Online (Sandbox Code Playgroud)
最后我看到了这一点(尽管我只运行了一个测试):
Ran 3 tests in 1.48s
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能只运行所需的测试?
先感谢您。
实际上,您的代码不应该依赖于变量的实际来源。例如,定义一个config.py
import os
config = {
"user" : os.environ["username"],
"pass": os.environ["password"]
}
Run Code Online (Sandbox Code Playgroud)
然后更改您的测试代码以模拟/定义配置字典以及导入配置模块的真实方法
同样,您应该模拟数据库方法,这样您就不需要真正需要身份验证,除非您明确尝试测试该方法
$ export username="user"
$ export password="secret"
$ python -m unittest tests.unit_test_1
Run Code Online (Sandbox Code Playgroud)
然后像你一样在你的代码中访问
os.environ["username"]
Run Code Online (Sandbox Code Playgroud)
或者
$ username="user" password="secret" python -m unittest tests
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17973 次 |
| 最近记录: |