Python 3.7 单元测试
Python 3.7 单元测试
我尝试了很多方法(包括从SO和其他地方),尝试运行我的测试,但都没有成功。以下是我当前的代码:\n我调用test.py
来运行测试:python3 ./src/preprocess/python/test.py
\nimport unittest\n
if __name__ == '__main__': testsuite = unittest.TestLoader().discover('.') unittest.TextTestRunner(verbosity=2).run(testsuite)
\n测试文件如下:\nimport unittest\nfrom scrapes.pdf import full_path_to_destination_txt_file\nprint(full_path_to_destination_txt_file)\nclass PreprocessingTest(unittest.TestCase):\n def path_txt_appending(self):\n self.assertEqual(full_path_to_destination_txt_file(\n \"test\", \"/usr/test\"), \"/usr/test/test.txt\")\nif __name__ == \'__main__\':\n unittest.main(verbosity=2)\n但输出总是如下所示:\npython3 ./src/preprocess/python/test.py\n----------------------------------------------------------------------\nRan 0 tests in 0.000s\nOK\n其他信息:\n
- \n
- 如您所见,我并不是从根目录调用这个文件。测试文件夹位于
./src/preprocess/python/test/
下,并且已经包含了__init__.py
文件(test.py所在的级别也有一个init文件) - 如果我必须为所有测试编写调用代码,那对我来说也没关系,我只是想完成这个
- 使用-t进行自动搜索也不起作用,所以我认为这里使用test.py这种更可靠的方法会起作用...
- 使用这个框架是我必须遵循的要求
- test_preprocessing.py位于测试文件夹中,并且
from scrapes.pdf import full_path_to_destination_txt_file
,scrapes是与test同级的一个模块文件夹 - 当我在命令行中直接调用单个单元测试时,由于相对导入的原因,它会失败。但使用test.py(显然)会找到这些模块。
\n
\n
\n
\n
\n
\n
\n问题出在哪里?
Python 3.7 Unit Tests问题的出现原因是,默认情况下,unittest只会执行方法名以test
开头的方法。根据文档的描述,可以通过更改testMethodPrefix
属性的值或者在方法名前添加test_
前缀来解决此问题。
unittest提供了testMethodPrefix
属性,该属性是一个字符串,用于指定将被解释为测试方法的方法名的前缀。默认值为'test'
。这会影响到getTestCaseNames()
以及所有的loadTestsFrom*
方法。
解决方法有两种,一种是更改testMethodPrefix
属性的值,另一种是在方法名前添加test_
前缀。更改testMethodPrefix
属性的值可以通过以下方式实现:
unittest.defaultTestLoader.testMethodPrefix = 'my_test_prefix'
这将把testMethodPrefix
属性的值更改为'my_test_prefix'
。这样,unittest将执行方法名以my_test_prefix
开头的方法。
另一种解决方法是在方法名前添加test_
前缀。例如,将方法名testMethod()
更改为test_testMethod()
。这样,unittest将执行这个方法作为一个测试方法。
总之,要解决Python 3.7 Unit Tests问题,可以通过更改testMethodPrefix
属性的值或在方法名前添加test_
前缀来实现。这样,unittest将会执行指定的测试方法。