0

I am working with python 3.7 with anaconda and visual code.

I have a project folder called providers.

Inside providers I have two folders:


   ├── Providers
       ├── __init__.py
       |             
       ├── _config                    
       |   ├── database_connection.py             
       |   ├── __init__.py           
       ├── src             
       |   ├── overview.py      
       |   ├── __init__.py   
       ├── utils             
       |   ├── pandas_functions.py      
       |   ├── __init__.py 
  

I want to import a class named DatabaseConnection that is inside the file database_connection.py in the file ovewview.py

# Overview.py
from config.database_connection import DatabaseConnection

This works as expected.

I want to run some tests, I am using pytest, and the script looks like this:

from unittest.mock import patch, Mock
import pandas as pd
from config.database_connection import DatabaseConnection  
from providers.utils.pandas_functions import get_df


@patch("providers.utils.pandas_functions.pd.read_sql")
def test_get_df(read_sql: Mock):
    read_sql.return_value = pd.DataFrame({"foo_id": [1, 2, 3]})
    results = get_df()
    read_sql.assert_called_once()
    pd.testing.assert_frame_equal(results, pd.DataFrame({"bar_id": [1, 2, 3]}))

But is giving me this error:

plugins: hypothesis-5.5.4, arraydiff-0.3, astropy-header-0.1.2, doctestplus-0.5.0, mock-3.4.0, openfiles-0.4.0, remotedata-0.3.2
collected 0 items / 1 error

===================================================================================================== ERRORS =====================================================================================================
________________________________________________________________________________ ERROR collecting tests/test_pandas_functions.py _________________________________________________________________________________
ImportError while importing test module 'C:\Users\jordi_adm\Documents\GitHub\mcf-pipelines\cpke-cash-advance\providers\tests\test_pandas_functions.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests\test_pandas_functions.py:3: in <module>
    from config.database_connection import DatabaseConnection
E   ModuleNotFoundError: No module named 'config'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
================================================================================================ 1 error in 0.35s ================================================================================================

It cannot find the module config, while if I run the overview.py file it can import it without problems.

If import config.database_connection import DatabaseConnection with providers at the beginning, pytest is able to call this function:

from unittest.mock import patch, Mock
import pandas as pd
from providers.config.database_connection import DatabaseConnection  
from providers.utils.pandas_functions import get_df


@patch("providers.utils.pandas_functions.pd.read_sql")
def test_get_df(read_sql: Mock):
    read_sql.return_value = pd.DataFrame({"foo_id": [1, 2, 3]})
    results = get_df()
    read_sql.assert_called_once()
    pd.testing.assert_frame_equal(results, pd.DataFrame({"bar_id": [1, 2, 3]}))

plugins: hypothesis-5.5.4, arraydiff-0.3, astropy-header-0.1.2, doctestplus-0.5.0, mock-3.4.0, openfiles-0.4.0, remotedata-0.3.2
collected 1 item

tests\test_pandas_functions.py .                                                                                                                                                                            [100%]

=============================================================================================== 1 passed in 0.29s ================================================================================================

If I try to run a script inside of this project with providers at the beginning, for example modifying overview.py:

from providers.config.database_connection import DatabaseConnection 

I obtain this error:


from providers.config.database_connection import DatabaseConnection 
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
c:\Users\jordi_adm\Documents\GitHub\mcf-pipelines\cpke-cash-advance\providers\run.py in 
----> 2 from providers.config.database_connection import DatabaseConnection

ModuleNotFoundError: No module named 'providers'

What is the reason to pytest needs to specify providers at the begging?

J.C Guzman
  • 1,192
  • 3
  • 16
  • 40
  • Try adding a ```__init__.py``` file in your ```test``` folder and then use the standard imports. – Stan11 Dec 16 '20 at 08:44
  • Refer https://stackoverflow.com/questions/25827160/importing-correctly-with-pytest for more detailed info on these imports related to pytest – Stan11 Dec 16 '20 at 08:47

0 Answers0