我为将使用Flask框架处理证书的网站创建了一个Web界面。我想学习如何执行单元测试。我创建了一个文件,它将运行测试并验证routers.py文件。
Test.py代码:
import unittest
import sys
sys.path.insert(0, 'app/')
import routes
class FlaskrTestCase(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_my_file(self):
self.assertTrue(Certificate.IsValid(all_cert[2]))
if __name__ == '__main__':
unittest.main()
我认为错误是由于routers.py中这部分代码引起的:
@app.route('/')
@app.route('/index')
def index():
return render_template('index.html', title='Home', all_cert = all_cert)
@app.route('/all_certificates')
def all_certificates():
return render_template('all_certificates.html', title='all_certificates', all_cert = all_cert)
当我执行“ flask run”命令时,此方法有效,但是如果我输入python3 -m unittest test.py,则会出现错误:
File "/home/marka/Документы/Practice/test.py", line 4, in <module>
import routes
File "app/routes.py", line 30, in <module>
@app.route('/index')
File "/home/marka/Документы/Practice/venv/lib/python3.5/site-packages/flask/app.py", line 1251, in decorator
self.add_url_rule(rule, endpoint, f, **options)
File "/home/marka/Документы/Practice/venv/lib/python3.5/site-packages/flask/app.py", line 67, in wrapper_func
return f(self, *args, **kwargs)
File "/home/marka/Документы/Practice/venv/lib/python3.5/site-packages/flask/app.py", line 1222, in add_url_rule
'existing endpoint function: %s' % endpoint)
AssertionError: View function mapping is overwriting an existing endpoint function: index
我在论坛上找到了一个类似的主题:AssertionError: View function mapping is overwriting an existing endpoint function: main,但是我不知道如何在我的代码中应用它。是什么导致错误?如何不同地使用装饰器?
我试图重命名函数索引:
def index():
index.func_name = func.func_name
return render_template('index.html', title='Home', all_cert = all_cert)
然后我得到错误:
File "/home/marka/Документы/Practice/test.py", line 4, in <module>
import routes
File "app/routes.py", line 33
return render_template('index.html', title='Home', all_cert = all_cert)
^
IndentationError: unindent does not match any outer indentation level
在测试中,我想检查存储证书的功能并验证其有效性。 我所有的代码都在https://github.com/Butyrate/CertificationCenter中。
谢谢。
答案 0 :(得分:0)
由于routes
模块已加载两次,因此您收到该错误。如您所知,python只加载模块一次。该规则的例外是,您将模块多次添加到python路径中:
sys.path.insert(0, 'app/')
如果删除该行,则不会多次重新定义主函数。您只需在您的print
文件的顶层写一个routes.py
即可查看我要告诉您的内容。您将看到它如何打印两次。