【发布时间】:2021-10-02 08:11:20
【问题描述】:
已经有几个关于这个主题的问题得到了回答,但实际上并没有解决我的问题。
我正在使用 PyCharm 2021.2,我希望能够单独和整体运行单元测试。这很重要,因为如果我有很多测试并且只有一些测试失败,我通常会调试我的代码并且只想运行我失败的测试以查看我的调试是否成功。只有这样我才想重新运行所有测试。
我的设置如下:
所以,例如,我想:
- 右键单击文件夹
tests并运行该文件夹中的所有测试(在我的示例屏幕截图中,只有一个test_MyClass.py,但通常这里会有很多这样的测试)。 - 右键单击单个测试,例如
test_MyClass.py,并自行运行。
这两种可能性通常都可以正常工作。但是,当我的单个测试使用一些相对路径时,例如,读取一些测试资产(在我的情况下从文件夹 containing_folder/tests/testassets),只有选项 1)有效。选项 2) 遇到FileNotFoundError: No such file or directory。
重现此行为的代码是:
MyClass.py:
class MyClass:
_content = None
def set_content(self, content):
self._content = content
def get_content(self):
return self._content
test_MyClass.py:
import unittest
import io
from ..MyClass import MyClass
class MyClassTests(unittest.TestCase):
myClassInstance = None
@classmethod
def setUpClass(cls):
cls.myClassInstance = MyClass()
def get_file(self, use_case):
path_to_file = "testassets/" + use_case + ".txt"
with io.open(path_to_file, 'r', encoding="utf-8") as file:
file = file.read()
return file
def test_uc_file1(self):
file_content = self.get_file("uc_1")
self.myClassInstance.set_content(file_content)
self.assertEquals("test1", self.myClassInstance.get_content())
def test_uc_file2(self):
file_content = self.get_file("uc_2")
self.myClassInstance.set_content(file_content)
self.assertEquals("test2", self.myClassInstance.get_content())
似乎path_to_file = "testassets/" + use_case + ".txt" 仅在 1) 选项中用作相对路径,但在 2) 选项中不起作用。
如何以编程方式识别我在 PyCharm 中开始测试的选项 1) 或 2)?然后我必须为选项 2) 选择哪条路径?我尝试了../testassets、../../testassets、../../、、../,但没有一个适用于选项 2)。
【问题讨论】:
标签: python unit-testing path pycharm