我以前使用过Flask,它提供了一种简单的方法来配置以不同模式运行的应用程序。 (开发,测试,生产...)
class BaseConfig:
MY_PATH = "Something"
class DevelopmentConfig(BaseConfig):
MY_PATH = "Something else"
# ...
我正在尝试构建类似的东西,但不使用Flask。这是我能找到的最简单的代码的结构:
-src
- main.py
- zip2h5
- __init__.py
- foo.py
-test
- __init__.py
- test_foo.py
对象Foo.py
的方法path
在开发人员模式下输出“ path / to / dev”,在测试模式下输出“ path / to / test”。在代码中编写if
语句很麻烦,并且很难正确测试。使用环境变量似乎更好。如何以及在哪里设置Flask的配置?
# foo.py
class Foo():
def __init__(self, name):
self.name = name
def path(self):
return "path/in/dev"
# test_foo.py
class TestFoo(unittest.TestCase):
def test_path(self):
boo = Foo("Boo")
expected = "path/in/test"
self.assertEquals(boo.path(), expected)
请不要告诉我可以修补此方法。正如我所说的,这只是一个例子。
答案 0 :(得分:0)
您可以通过os module获得您的流程环境。
您只需在开发和测试用例中为路径注入不同的环境变量即可。我不确定您如何运行测试,但是通常您可以执行类似PATH='path/in/test' tests.sh
的操作来完成所需的操作。
我使用dotenv并将.env
文件保留在项目根目录中以进行管理。我有一个基础测试类,它加载.env.test
而不是.env
进行测试配置。
答案 1 :(得分:0)
与Flask一样进行操作。具有多个Config类,然后将env用作参数,例如
class Foo():
def __init__(self, name, env):
self.name = name
self.env = env
def path(self):
if self.env == 'TEST':
#initialize TestConfig class here
return TestConfigPath
class TestFoo(unittest.TestCase):
def test_path(self):
boo = Foo("Boo")
expected = "path/in/test"
self.assertEquals(boo.path(), expected)