从辅助源文件夹导入PyDev

2024-10-01 07:50:07 发布

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

摘要:使用PyDev,我无法让一个Python模块(FooTest)导入同一个(test)源文件夹中的另一个(FooMock)。

我有两个源文件夹和四个Python模块,目录结构如下。最小的示例代码在问题的末尾。虽然我已经提供了很多信息,请不要让这个吓到你-这是一个简单的问题场景。在

PyDevProject/
  src/         (source folder for prod code)
    foo/
      __init__.py
      Bar.py
      Foo.py
  test/        (source folder for tests)
    foo/
      __init__.py
      FooMock.py
      FooTest.py

这里的问题是,当我试图在FooTest模块中导入FooMock类时,我得到了以下错误(运行PyUnit来运行FooTest测试):

^{pr2}$

我尝试过的事情:

  • 尽管FooMock和FooTest都在同一个Python包中,但不能导入FooMock。在
  • 将FooMock移到src/目录下也可以,即使是放在唯一的Python包下(只要它在src/下)。但这对我来说是不可接受的(在产品源文件夹中有测试代码)。在
  • 我已经确保PyDev中的PYTHONPATH设置被设置为指定两个文件夹都是源文件夹。在
  • 将FooMock代码复制并粘贴到FooTest代码中。但这对我来说是不可接受的(因为我想在其他地方引用FooMock,在多个测试文件中,我不希望FooMock的多个副本随之浮动)。在

对此我能做些什么吗?在

代码:

# Code for Bar.py -----------------------------------------------------
class Bar(object):
    def __init__(self, foo):
        self.foo = foo
    def next(self):
        self.foo.incr()

# Code for Foo.py -----------------------------------------------------
class Foo(object):
    def __init__(self):
        self.num = 0
    def incr(self):
        self.num = self.num + 1

# Code for FooMock.py -------------------------------------------------
class FooMock(object):
    def mock_incr(self):
        self.hit = True

# Code for FooTest.py -------------------------------------------------
import unittest
from foo.Foo import Foo
from foo.Bar import Bar
from foo.FooMock import FooMock

class Test(unittest.TestCase):
    def test_Foo(self):
        foo = Foo()
        foo.incr()
        self.assertEquals(1, foo.num, "should be 1")
    def test_Bar(self):
        foo = FooMock()
        bar = Bar(foo)
        bar.next()

if __name__ == "__main__":
    unittest.main()

目录截图: Image showing directory structure and PYTHONPATH as previously explained


Tags: 代码pytestself文件夹forfooinit
1条回答
网友
1楼 · 发布于 2024-10-01 07:50:07

在PYTHONPATH中有两个名为foo的模块。在第一个目录中,包foo所在的目录中,确实没有名为FooMock的模块。在

你能把测试源目录下的模块foo重命名成其他的吗?像footests而不是{}?在

相关问题 更多 >