[pytest-dev] Parametrized fixture fails when using unittest

Floris Bruynooghe flub at devork.be
Thu Feb 20 22:07:13 CET 2014


Hi Nikolaus,

I'm not sure about your TestClass at all and wasn't aware that using a
unitest.TestCase class with parameterisation could even possibly work
like this, but it seems to at least partially.  However re-writing the
TestClass without using unittest it works fine and simple:

class TestCase:
    def test_method(self, param2, param1a):
        if param2[0] == 1:
            assert param1a == 0
        else:
            assert param1a == 7

So if you can maybe avoid using the parameterisation mark with
unitest.TestCase classes?

Regards,
Floris


On 10 February 2014 16:45, Nikolaus Rath <Nikolaus at rath.org> wrote:
> Hi,
>
> Seems you can't even trust copy and paste anymore... no idea how that
> happened. Here's the missing part (so no, self is not missing):
>
> [...]
> @pytest.mark.usefixtures('param2', 'param1a')
> class TestClass(unittest.TestCase):
>     def test_method(self):
>         if self.param2[0] == 1:
>             assert self.param1a == 0
>         else:
>             assert self.param1a == 7
>
> Thanks,
> -Nikolaus
>
>
> "Florian Schulze" <florian.schulze-hi6Y0CQ0nG0 at public.gmane.org> writes:
>> Hi!
>>
>> You didn't include the test_method, maybe you just forgot the 'self'
>> as first parameter?
>>
>> Regards,
>> Florian Schulze
>>
>>
>> On 10 Feb 2014, at 4:51, Nikolaus Rath wrote:
>>
>>> Hello,
>>>
>>> I don't understand why the following test fixture works for the test
>>> function, but fails for the test method. Am I doing something wrong,
>>> or
>>> is this a bug?
>>>
>>> $ cat t0_mine.py
>>> import pytest
>>> import unittest
>>>
>>> @pytest.yield_fixture(params=(0,1,2))
>>> def param1(request):
>>>  if request.param == 1:
>>>      pytest.skip('not so good')
>>>
>>>  yield request.param
>>>
>>> @pytest.fixture(params=('a','b'))
>>> def param2(request, param1):
>>>  return (param1, request.param)
>>>
>>> @pytest.fixture()
>>> def param1a(request, param1):
>>>  if param1 == 1:
>>>      return 0
>>>  else:
>>>      return 7
>>>
>>> def test_function(param2, param1a):
>>>  if param2[0] == 1:
>>>      assert param1a == 0
>>>  else:
>>>      assert param1a == 7
>>>
>>> @pytest.mark.usefixtures('param2', 'param1a')
>>>
>>> $ py.test-3 t0_mine.py -v
>>> ==================================== test session starts
>>> ====================================
>>> platform linux -- Python 3.3.3 -- pytest-2.5.1 -- /usr/bin/python3
>>> collected 7 items
>>>
>>> t0_mine.py:25: test_function[a-0] PASSED
>>> t0_mine.py:25: test_function[a-1] SKIPPED
>>> t0_mine.py:25: test_function[a-2] PASSED
>>> t0_mine.py:25: test_function[b-0] PASSED
>>> t0_mine.py:25: test_function[b-1] SKIPPED
>>> t0_mine.py:25: test_function[b-2] PASSED
>>> t0_mine.py:33: TestClass.test_method ERROR
>>>
>>> ========================================== ERRORS
>>> ===========================================
>>> __________________________ ERROR at setup of TestClass.test_method
>>> __________________________
>>>
>>> request = <SubRequest 'param1' for <TestCaseFunction 'test_method'>>
>>>
>>>  @pytest.yield_fixture(params=(0,1,2))
>>>  def param1(request):
>>>>    if request.param == 1:
>>> E       AttributeError: 'SubRequest' object has no attribute 'param'
>>>
>>> t0_mine.py:9: AttributeError
>>> ======================= 4 passed, 2 skipped, 1 error in 0.02 seconds
>>> ========================
>>>
>>>
>>>
>>> Best,
>>> Nikolaus
>>>
>>>
>>> --
>>> Encrypted emails preferred.
>>> PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6  02CF A9AD B7F8 AE4E 425C
>>>
>>>           »Time flies like an arrow, fruit flies like a Banana.«
>>> _______________________________________________
>>> Pytest-dev mailing list
>>> Pytest-dev at python.org
>>> https://mail.python.org/mailman/listinfo/pytest-dev
>> _______________________________________________
>> Pytest-dev mailing list
>> Pytest-dev at python.org
>> https://mail.python.org/mailman/listinfo/pytest-dev
>
>
> --
> Encrypted emails preferred.
> PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6  02CF A9AD B7F8 AE4E 425C
>
>              »Time flies like an arrow, fruit flies like a Banana.«
> _______________________________________________
> Pytest-dev mailing list
> Pytest-dev at python.org
> https://mail.python.org/mailman/listinfo/pytest-dev



-- 
Debian GNU/Linux -- The Power of Freedom
www.debian.org | www.gnu.org | www.kernel.org


More information about the Pytest-dev mailing list