报告不带 `-m unittest` 的 Python 测试用例模块的意外调用
Report accidental call of a Python test case module without `-m unittest`
我不小心用以下命令调用了我的 Python 单元测试:
coverage run -m tests.unit.Tokens
这执行了一些代码并报告了覆盖率报告。但实际上覆盖范围看起来只是初始化。没有错误信息,也没有异常。
经过一些搜索和调试,我发现我错过了 -m
和我的测试用例模块之间的包名 unittest
。因此模块 "executed" 不是带有参数 tests.unit.Tokens
的 unittest
。它直接执行了测试用例声明模块。
调用示例:
coverage run -m tests.unit.Tokens
应该报告如下内容:
Module 'tests.unit.Tokens' needed to be loaded by Pythons `unittest`.
Use 'python3 -m unitest test.unit.Tokens'
我能add/implement/overwrite干什么,直接调用模块就报错了?
我可以想象,可能看起来像我们在主要 Python 文件中使用的内容:
if __name__ == "__main__":
# this is the entry point
通过 python -m
启动的模块也在命名空间 __main__
中执行。因此,(声明性)测试用例模块中的以下代码可以提示如何正确执行测试用例。
if __name__ == "__main__":
print("ERROR: you called a testcase declaration file as an executable module.")
print("Use: 'python -m unitest <testcase module>'")
我不小心用以下命令调用了我的 Python 单元测试:
coverage run -m tests.unit.Tokens
这执行了一些代码并报告了覆盖率报告。但实际上覆盖范围看起来只是初始化。没有错误信息,也没有异常。
经过一些搜索和调试,我发现我错过了 -m
和我的测试用例模块之间的包名 unittest
。因此模块 "executed" 不是带有参数 tests.unit.Tokens
的 unittest
。它直接执行了测试用例声明模块。
调用示例:
coverage run -m tests.unit.Tokens
应该报告如下内容:
Module 'tests.unit.Tokens' needed to be loaded by Pythons `unittest`.
Use 'python3 -m unitest test.unit.Tokens'
我能add/implement/overwrite干什么,直接调用模块就报错了?
我可以想象,可能看起来像我们在主要 Python 文件中使用的内容:
if __name__ == "__main__":
# this is the entry point
通过 python -m
启动的模块也在命名空间 __main__
中执行。因此,(声明性)测试用例模块中的以下代码可以提示如何正确执行测试用例。
if __name__ == "__main__":
print("ERROR: you called a testcase declaration file as an executable module.")
print("Use: 'python -m unitest <testcase module>'")