当前位置: 首页 > 面试题库 >

pytest找不到模块

夏侯野
2023-03-14
问题内容

我遵循pytest的良好做法,或者至少我 认为自己是 。但是,pytest找不到我的模块。它似乎没有在其中包含当前目录PYTHONPATH

源文件:

def add(x, y):
    return x + y

测试文件:

import pytest
from junk.ook import add


def test_add_true():
    assert add(1, 1) == 2

并使用称为“ p3”的Python 3虚拟环境输出shell。

p3; pwd          
/home/usr/tmp/junk
p3; ls           
total 0
0 junk/  0 tests/
p3; ls junk      
total 4.0K
4.0K ook.py     0 __init__.py
p3; ls tests 
total 4.0K
4.0K test_ook.py     0 __pycache__/
p3; pytest
============================= test session starts ==============================
platform linux -- Python 3.4.5, pytest-3.4.1, py-1.5.2, pluggy-0.6.0
rootdir: /home/usr/tmp/junk, inifile:
collected 0 items / 1 errors

==================================== ERRORS ====================================
______________________ ERROR collecting tests/test_ook.py ______________________
ImportError while importing test module '/home/usr/tmp/junk/tests/test_ook.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_ook.py:2: in <module>
    from junk.ook import add
E   ImportError: No module named 'junk'
!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!
=========================== 1 error in 0.08 seconds ============================

    def test_add_true():
        assert add(1, 1) == 2

但是,运行以下命令确实可以正常工作。

p3; python -m pytest tests/
============================= test session starts ==============================
platform linux -- Python 3.4.5, pytest-3.4.1, py-1.5.2, pluggy-0.6.0
rootdir: /home/usr/tmp/junk, inifile:
collected 1 item

tests/test_ook.py .                                                      [100%]

=========================== 1 passed in 0.02 seconds ===========================

我究竟做错了什么?


问题答案:

只需将一个空conftest.py文件放在项目根目录中:

$ pwd
/home/usr/tmp/junk
$ touch conftest.py

您的项目结构应变为:

junk
├── conftest.py
├── junk
│   ├── __init__.py
│   └── ook.py
└── tests
    └── test_ook.py

此处发生的情况:pytest发现a时conftest.py,它将进行修改,sys.path以便可以从conftest模块中导入内容。因此,由于现在conftest.py在rootdir中找到一个空值,pytest将被强制将其追加到sys.path。这样做的副作用是junk模块可以导入。



 类似资料:
  • 问题内容: 我收到错误,无法在Node.js应用程序中找到模块“ bcrypt” 我尝试使用 npm install bcrypt 安装它, 但仍然出现问题。 错误信息: 问题答案: 使用命令无法为我解决问题。 我尝试了以下命令,但问题解决了。

  • 问题内容: 我是Python的初学者。在开始之前,这是我的Python文件夹结构 在下面,我有一个名为的文件夹,其中有一个Python文件,其内容如下: 接下来,我位于文件夹中,位于上一级: 每当我运行它都会导致错误 我有什么想念的吗? 问题答案: Python中的所有模块都必须具有特定的目录结构。您可以在此处找到详细信息。 在目录下创建一个空文件,使您的目录结构如下所示: 同样在文件中,将imp

  • 我有个问题, 我试图在apple store上发布我的应用程序的新版本,但它给出了这个问题: 找不到模块“firebase_analytics” 有人经历过这个吗? 找不到模块“firebase_analytics”

  • 我试着在一个带有M1芯片的新Mac上建立一个现有的flutter项目。我面临以下错误:audio_session模块丢失。 有什么想法吗?

  • 问题内容: 今天,我尝试了解有关Google Web Starter Kit的更多信息,因此我遵循了这些说明,经过一番斗争和问题,我只是尝试启动本地服务器(我们将要研究的第一个任务是:。)并收到以下错误消息: C:\ gwsk> gulp服务 老实说,我在这里完全迷路了,因此非常感谢您的帮助。我是node.js的新手,我只是想让它尝试GWSK,但令人头疼:(…我是一名Web设计人员,而不是开发人员

  • 问题内容: 我尝试在Localy节点中要求一些JS文件-效果很好,但在Heroku中却遇到此错误- 错误:找不到模块“ ./routes.js” 我的代码看起来像: 我究竟做错了什么?谢谢! 问题答案: 您可以尝试运行dyno的一次性副本,以使其列出目录内容–这将使您检查文件是否在期望的位置。(Heroku上有更多这方面的信息在这里。)例如: 这将使Heroku创建(非常简短)您的应用程序的其他副