我遵循this answer使用unittest方法以编程方式生成多个测试用例
代码如下:
import unittest
import my_code
# Test cases (List of input output pairs not explicitly mentioned here)
known_values = [
{'input': {}, 'output': {}},
{'input': {}, 'output': {}}
]
# Subclass TestCase
class KnownGood(unittest.TestCase):
def __init__(self, input_params, output):
super(KnownGood, self).__init__()
self.input_params = input_params
self.output = output
def runTest(self):
self.assertEqual(
my_code.my_func(self.input_params['a'], self.input_params['b']),
self.output
)
# Test suite
def suite():
global known_values
suite = unittest.TestSuite()
suite.addTests(KnownGood(input_params=k['input'], output=k['output']) for k in known_values)
return suite
if __name__ == '__main__':
unittest.TextTestRunner().run(suite())
如果我在PyCharm中打开一个Python控制台并运行上面的代码块(运行unittest.TextTestRunner()
而不使用If条件),测试将成功运行
..
----------------------------------------------------------------------
Ran 2 tests in 0.002s
OK
<unittest.runner.TextTestResult run=2 errors=0 failures=0>
如果通过单击PyCharm中if __name__
块的绿色运行按钮来运行测试,则会出现以下错误:
TypeError: __init__() missing 1 required positional argument: 'output'
Process finished with exit code 1
Empty suite
Empty suite
Python版本:3.7
项目结构:(-
表示文件夹,.
表示文件)
-project_folder
-tests
.test_my_code.py
.my_code.py
问题是,如果PyCharm将模块标识为包含测试,则默认情况下它正在模块上运行
unittest
或pytest
(无论您配置为测试运行程序的是什么),而忽略if __name__ == '__main__'
中的部分。这基本上意味着它执行
unittest.main()
,而不是运行测试的定制版本我所知道的获得正确运行配置的唯一解决方案是手动添加:
Edit configurations...
+
添加新配置Python
作为类型Script path
(或使用浏览按钮)也许有人知道一种更方便的方法来强迫PyCharm使用“运行”而不是“运行测试”
相关问题 更多 >
编程相关推荐