Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Import error running unittest in Python3

Tags:

I have a problem importing files in Python 3.6. My directories tree is as given below:

project/
    app/
    ├── __init__.py
    ├── a.py
    └── b.py
    test/
    ├── __init__.py
    ├── test_a.py
    └── test_b.py

It works my application (but, no works the tests) using following import statement in b.py:

from a import *

But, it does not work my application (but, works the tests) using this other in b.py:

from .a import *

So, I choose from a import *. Executing test like python3 -m unittest I always get following error:

E.
======================================================================
ERROR: tests.test_cell (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: tests.test_cell
Traceback (most recent call last):
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 428, in _find_test_path
    module = self._get_module_from_name(name)
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 369, in _get_module_from_name
    __import__(name)
  File "/Users/serrodcal/Repositories/project/tests/test_b.py", line 2, in <module>
    from app.b import *
  File "/Users/serrodcal/Repositories/project/app/b.py", line 1, in <module>
    from a import *
ModuleNotFoundError: No module named 'a'


----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (errors=1)

In this case, my import statement in test_b.py is as given below:

from unittest import TestCase
from app.cell import *

Is there any way to fix this problem?

like image 846
Sergio Rodríguez Calvo Avatar asked Jun 01 '17 18:06

Sergio Rodríguez Calvo


People also ask

What does import unittest do in Python?

The Python standard library includes the unittest module to help you write and run tests for your Python code. Tests written using the unittest module can help you find bugs in your programs, and prevent regressions from occurring as you change your code over time.

How do I run unittest in Python?

If you're using the PyCharm IDE, you can run unittest or pytest by following these steps: In the Project tool window, select the tests directory. On the context menu, choose the run command for unittest . For example, choose Run 'Unittests in my Tests…'.

What is unittest library in Python?

What is the Python unittest? Unit testing is a technique in which particular module is tested to check by developer himself whether there are any errors. The primary focus of unit testing is test an individual unit of system to analyze, detect, and fix the errors.

What is a import error in Python?

In Python, ImportError occurs when the Python program tries to import module which does not exist in the private table. This exception can be avoided using exception handling using try and except blocks.


1 Answers

I was confused with imports in Python and how python works with modules.

project/
    module/
        __init__.py
        a.py
        b.py
    test/
        test_a.py
        test_b.py
    main.py

This is my new directories tree. The contains of the files are:

In main.py:

from module.b import Something

In b.py:

from .a import Something

In a.py:

from unittest import TestCase
from module.a import Something

In test_b.py:

from unittest import TestCase
from module.a import Something
from module.b import Something

Like this, it works fine, application and tests.

like image 130
Sergio Rodríguez Calvo Avatar answered Oct 11 '22 16:10

Sergio Rodríguez Calvo