Tristan Fabrini
Tristan Fabrini

Reputation: 68

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?

Upvotes: 1

Views: 5906

Answers (1)

Jack Thomson
Jack Thomson

Reputation: 490

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

Upvotes: 1

Related Questions