无法在PyCharm中运行unittest测试套件(使用TestCase子类),而它在Python控制台中运行

2024-10-02 18:22:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我遵循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

Tags: 代码importselfinputoutputinitmydef
1条回答
网友
1楼 · 发布于 2024-10-02 18:22:15

问题是,如果PyCharm将模块标识为包含测试,则默认情况下它正在模块上运行unittestpytest(无论您配置为测试运行程序的是什么),而忽略if __name__ == '__main__'中的部分。
这基本上意味着它执行unittest.main(),而不是运行测试的定制版本

我所知道的获得正确运行配置的唯一解决方案是手动添加:

  • 在配置列表中选择Edit configurations...
  • 使用+添加新配置
  • 选择Python作为类型
  • 按测试路径填写Script path(或使用浏览按钮)

也许有人知道一种更方便的方法来强迫PyCharm使用“运行”而不是“运行测试”

相关问题 更多 >