Search code examples
objectpytestinstantiationfixtures

How to use a pytest fixture to instantiate a object under test?


It appears that fixtures should be used to instantiate an object under test for pytest, especially if it is used by several test_ functions. However, after trying to adapt examples given in the pytest doc, I cannot get the following to work.

import pytest
...
@pytest.fixture
def newMyClass():
    obj = MyClass(1,2)

...
def test_aMethod(newMyClass):
    objectUnderTest = newMyClass.obj
    ...

There are no complaints about the fixture or the constructor, but then I receive the pytest error

   def test_aMethod(newMyClass):
>      objectUnderTest = newMyClass.obj()
E      AttributeError: 'NoneType' object has no attribute 'obj'

If fixtures can be used for this, how should that be coded?


Solution

  • To clean up @hoefling's answer, you need to instantiate your class directly and return that instance. Check out this code if you're looking for a cleaned up version.

    import pytest
    
    class MyClass():
      def __init__(self, obj, foo):
          self.obj = obj
          self.foo = foo
    
    @pytest.fixture
    def newMyClass():
        myClassInstance = MyClass(1,2)
        return myClassInstance
    
    def test_aMethod(newMyClass):
        objectUnderTest = newMyClass.obj
        assert objectUnderTest