smarie / python-pytest-steps

A tiny package to ease the creation of test steps with shared intermediate results/state.
https://smarie.github.io/python-pytest-steps/
BSD 3-Clause "New" or "Revised" License
57 stars 5 forks source link

Support test functions that are located inside classes #16

Closed smarie closed 5 years ago

smarie commented 5 years ago

ValueError: <function TestClass.test_xxx> uses no argument '________step_name_'

It seems that test functions located inside classes are not supported yet.

smarie commented 5 years ago

It would be non-trivial to fix this: indeed the way we currently generate the wrappers around test functions is done with a hacked version of decorator to add arguments in the signature, and the only way I found as of today is to prepend the new arguments at the beginning of the positional arguments in the new signature.

When a function is located inside a class, its first argument is 'self' or 'cls', and should remain the first argument, even after our wrapping.

We could however inspect the test functions and detect that it is an instance, class or static method, so that we handle the case specifically.

Let's wait for users actually requiring it :)

rplevka commented 5 years ago

uhm...here i am :D

smarie commented 5 years ago

Thanks for caring! As of today as I wrote above, this would require a major non-trivial modification.

A workaround is to use the "new" pytest style (i.e. no classes, just plain old functions in separate modules). But I understand that in large projects this might not be satisfying.

I would gladly accept contributions on the topic if anyone feels ready to dig into dynamic code compilation.

zeburek commented 5 years ago

Looks like a MUSTHAVE feature

smarie commented 5 years ago

It seems that this is doable quite easily with current status of the code (now that I rely on makefun do manipulate the signatures). I'll have a look.

smarie commented 5 years ago

Fixed in 1.7.0 (to be released in a few minutes)