Solución:
Todo lo que necesita hacer para probar un método de clase es crear una instancia de esa clase y llamar al método en esa instancia:
def test_action(self):
sc = SuperCool()
assert sc.action(1) == 1
Bueno, una forma es simplemente crear su objeto dentro del método de prueba e interactuar con él desde allí:
def test_action(self, x):
o = SuperCool()
assert o.action(2) == 4
Aparentemente puedes usar algo como el clásico setup
y teardown
prueba unitaria de estilo usando los métodos aquí: http://doc.pytest.org/en/latest/xunit_setup.html
No estoy 100% seguro de cómo se usan porque la documentación de pytest es terrible.
Editar: sí, aparentemente, si haces algo como
class TestSuperCool():
def setup(self):
self.sc = SuperCool()
...
# test using self.sc down here
Usaría cualquier accesorio solo para crear un entorno de prueba (como una conexión de base de datos) o parametrización de datos.
Si sus datos son relativamente triviales, puede definirlos dentro del caso de prueba:
def test_action_without_fixtures():
sc = SuperCool()
sc.element="snow"
sc.melt()
assert sc.element == 'water'
Ejemplo con parametrización:
@pytest.mark.parametrize("element, expected", [('snow', 'water'), ('tin', 'solder')])
def test_action_with_parametrization(element, expected):
sc = SuperCool()
sc.element = element
sc.melt()
assert sc.element == expected