Fabian
Fabian

Reputation: 5650

py.test can't import my module

I am struggeling getting a python import right. What I want to achieve is to have a module with several source files and a test folder with unit tests.

No matter what I do, I can't get py.test-3 to execute my tests. My directory layout looks like this:

.
├── module
│   ├── __init__.py
│   └── testclass.py
└── tests
    └── test_testclass.py

The __init__.py file looks like this:

__all__ = ['testclass']

The testclass.py file looks like this:

class TestClass(object):

    def __init__(self):
        self.id = 1

And my unit test like this:

import pytest
from module import TestClass

def test_test_class():
    tc = TestClass()
    assert(tc.id==1)

No matter how I call py.test-3 I will end up with a:

E   ImportError: No module named 'module'

Upvotes: 5

Views: 7532

Answers (2)

Fabio Duran Verdugo
Fabio Duran Verdugo

Reputation: 172

I would put in a header of testfile the path execution for pytest:

example:

import os, sys                                                                  
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))

With this I could know the path of any subfolder in my (test) project

Upvotes: 1

falsetru
falsetru

Reputation: 369394

First, unless you change the tests/test_testclass.py, you need to change module/__init__.py as follow:

from .testclass import TestClass

__all__ = ['TestClass']

And, when you run py.test set PYTHONPATH environment variable to let the interpreter know when to find modules:

PYTHONPATH=. py.test

Upvotes: 7

Related Questions