[TIP] (no subject)

Ned Batchelder ned at nedbatchelder.com
Sun Mar 29 09:01:37 PDT 2015


On 3/29/15 4:57 AM, dpb dpb wrote:
> Something I do not see addressed explicitly in the Pytest docs is this 
> behavior: Unlike normal class writing in Python 3, changing the value 
> of a class attribute in one function does not leave it changed in test 
> functions that are called subsequently:
>
As Holger mentioned, a new TestExample instance is created for each 
test.  This is how all the test runners work, because you want isolation 
between your tests.  One of the principles of the xUnit style of testing 
is that each test is independent of all other tests.  You want to be 
able to run a single test and not have it depend on the results of 
previous tests.

--Ned.

>     # test_pytest_class_attributes.py
>     """Test the setting of class attributes."""
>     class TestExample():
>         def setup(self):
>     self.attribute = 1 
>
>
>         def test_changing_attr(self):
>             """Change attribute on object."""
>     self.attribute = 2
>             assert self.attribute == 2 
>
>
>         def test_attr_is_changed(self):
>             """Assume attribute is changed."""
>             assert self.attribute == 2 
>
>
>         def test_attr_is_unchanged(self):
>             """Assume attribute is unchanged."""
>             assert self.attribute == 1
>
>
> Output:
>
>     $ py.test test_pytest_class_attributes.py -v
>     ============================= test session starts
>     ==============================
>     platform darwin -- Python 3.4.1 -- py-1.4.25 -- pytest-2.6.3 --
>     /Users/dpb/py34/bin/python3.4
>     collected 3 items
>     test_pytest_class_attributes.py::TestExample::test_changing_attr
>     PASSED
>     test_pytest_class_attributes.py::TestExample::test_attr_is_changed
>     FAILED
>     test_pytest_class_attributes.py::TestExample::test_attr_is_unchanged
>     PASSED
>     =================================== FAILURES
>     ===================================
>     _______________________ TestExample.test_attr_is_changed
>     _______________________
>     self = <test_pytest_class_attributes.TestExample object at
>     0x10dd98ef0>
>         def test_attr_is_changed(self):
>             """Test whether attribute is changed."""
>     >       assert self.attribute == 2
>     E       assert 1 == 2
>     E        +  where 1 = <test_pytest_class_attributes.TestExample
>     object at 0x10dd98ef0>.attribute 
>
>     test_pytest_class_attributes.py:14: AssertionError
>     ====================== 1 failed, 2 passed in 0.02 seconds
>     ======================
>     $
>
>
> Is there special syntax or some special structure to make class 
> attributes behave In Pytest as they do in an ordinary Python class? 
> Example:
>
>     # display_class_attributes.py
>     """Test the setting of class attributes.""" 
>
>
>     class TestExample():
>         def __init__(self):
>     self.attribute = 1 
>
>
>         def test_changing_attr(self):
>             """Change attribute on object."""
>     self.attribute = 2
>             assert self.attribute == 2
>     print('Finished test_changing_attr.\n') 
>
>
>         def test_attr_is_changed(self):
>             """Test whether attribute is changed."""
>             assert self.attribute == 2
>     print('Finished test_attr_is_changed.\n') 
>
>
>         def test_attr_is_unchanged(self):
>             """Test whether attribute is unchanged."""
>             assert self.attribute == 1
>     print('Finiahed test_attr_is_unchanged.\n') 
>
>
>     t = TestExample()
>     t.test_changing_attr()
>     t.test_attr_is_changed()
>     t.test_attr_is_unchanged()
>
>
> Output:
>
> > $ python display_class_attributes.py
> >
> > self.attribute == 2: True
> >
> > self.attribute == 2: True
> >
> > self.attribute == 1: False
> >
> > $
>
> Thanks.
>
> - dpb
>
>
> _______________________________________________
> testing-in-python mailing list
> testing-in-python at lists.idyll.org
> http://lists.idyll.org/listinfo/testing-in-python

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20150329/130b5a85/attachment.htm>


More information about the testing-in-python mailing list