代码之家  ›  专栏  ›  技术社区  ›  paul_h

如何使路径在pytest之外运行测试

  •  0
  • paul_h  · 技术社区  · 4 年前

    我有一个考试通过了 pytest . 我还有一个相邻的源代码,它是一个控制台应用程序(不是pytest),它执行与barfs相同的功能 ModuleNotFoundError

    mylib/mylib.py:

    def adder(num1, num2):    
        return num1 + num2
    

    测试/myu test.py:

    from mylib.mylib import adder
    
    
    def test_adder():
    
        assert adder(2, 2) == 4
    

    from mylib.mylib import adder
    
    print(str(adder(2, 2)))
    

    正如我所建议的 皮特斯特 完成并指示测试已通过,但以下情况不存在:

    $ python3 test/mytest_outside_pytest.py 
    Traceback (most recent call last):
      File "test/mytest_outside_pytest.py", line 1, in <module>
        from mylib.mylib import adder
    ModuleNotFoundError: No module named 'mylib'
    

    $ cd test/
    $ python3 mytest_outside_pytest.py 
    Traceback (most recent call last):
      File "mytest_outside_pytest.py", line 1, in <module>
        from mylib.mylib import adder
    ModuleNotFoundError: No module named 'mylib'
    

    我有空的 __init__.py 在两个文件夹中。我不知道pytest对无法在“主”控制台应用程序中复制的路径加载做了什么。当然,我并不真正关心加法器库,我只是针对最小的可复制问题。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Tryph    4 年前

    pytest 将一些目录添加到 PYTHONPATH 允许测试自动运行( see the doc

    当你不使用 你没有这个机制,你必须管理 你一个人。


    为什么蟒蛇在你的情况下是不正确的?

    运行模块时使用 python path/to/module.py path/to 蟒蛇 .

    对你来说,你跑吧 python test/mytest_outside_pytest.py 解释器添加 test 目录中的 蟒蛇

    你可以通过添加 import pdb; pdb.set_trace() 在你人生的一开始 mytest_outside_pytest.py 模块进入调试会话并运行它。那么 import sys 并显示 sys.path 去看看吧 测试 蟒蛇


    如何解决?

    它可以通过多种方式实现。

    蟒蛇 在您的命令中:

    PYTHONPATH=. python test/mytest_outside_pytest.py
    

    python -m ... 正如评论中所建议的(不要忘记,在这种情况下,你必须 ,并且请记住,它只能从包含 mylib 测试

    python -m test.mytest_outside_pytest
    

    在这两种情况下,调试会话都可以向您显示根目录和 蟒蛇