Python 3.7 单元测试

9 浏览
0 Comments

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文件)
  • \n

  • 如果我必须为所有测试编写调用代码,那对我来说也没关系,我只是想完成这个
  • \n

  • 使用-t进行自动搜索也不起作用,所以我认为这里使用test.py这种更可靠的方法会起作用...
  • \n

  • 使用这个框架是我必须遵循的要求
  • \n

  • test_preprocessing.py位于测试文件夹中,并且from scrapes.pdf import full_path_to_destination_txt_file,scrapes是与test同级的一个模块文件夹
  • \n

  • 当我在命令行中直接调用单个单元测试时,由于相对导入的原因,它会失败。但使用test.py(显然)会找到这些模块。
  • \n

\n问题出在哪里?

0
0 Comments

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将会执行指定的测试方法。

0