<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
On 3/29/15 4:57 AM, dpb dpb wrote:<br>
<blockquote
cite="mid:CAJukCzdKk+MM-2LV54H_RbaPkSJVx3=zp=Kt4VqZp8zO6ppL=g@mail.gmail.com"
type="cite">
<div dir="ltr">
<div><font face="arial, helvetica, sans-serif">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: </font></div>
<div><font face="monospace, monospace"><br>
</font></div>
</div>
</blockquote>
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.<br>
<br>
--Ned.<br>
<br>
<blockquote
cite="mid:CAJukCzdKk+MM-2LV54H_RbaPkSJVx3=zp=Kt4VqZp8zO6ppL=g@mail.gmail.com"
type="cite">
<div dir="ltr">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace">#
test_pytest_class_attributes.py</font><font face="monospace,
monospace"><br>
</font><font face="monospace, monospace">"""Test the setting
of class attributes."""</font><font face="monospace,
monospace"><br>
</font><font face="monospace, monospace">class TestExample():<br>
</font><font face="monospace, monospace"> def setup(self):<br>
</font><font face="monospace, monospace">
self.attribute = 1</font> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace"> def
test_changing_attr(self):<br>
</font><font face="monospace, monospace"> """Change
attribute on object."""<br>
</font><font face="monospace, monospace">
self.attribute = 2<br>
</font><font face="monospace, monospace"> assert
self.attribute == 2</font> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace"> def
test_attr_is_changed(self):<br>
</font><font face="monospace, monospace"> """Assume
attribute is changed."""<br>
</font><font face="monospace, monospace"> assert
self.attribute == 2</font> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace"> def
test_attr_is_unchanged(self):<br>
</font><font face="monospace, monospace"> """</font><span
style="font-family:monospace,monospace">Assume</span><font
face="monospace, monospace"> attribute is unchanged."""<br>
</font><font face="monospace, monospace"> assert
self.attribute == 1</font></blockquote>
<div><font face="monospace, monospace"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif">Output:</font></div>
<div><font face="monospace, monospace"><br>
</font></div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace">$ py.test
test_pytest_class_attributes.py -v<br>
</font><font face="monospace, monospace">=============================
test session starts ==============================<br>
</font><font face="monospace, monospace">platform darwin --
Python 3.4.1 -- py-1.4.25 -- pytest-2.6.3 --
/Users/dpb/py34/bin/python3.4<br>
</font><font face="monospace, monospace">collected 3 items </font><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace">test_pytest_class_attributes.py::TestExample::test_changing_attr
PASSED<br>
</font><font face="monospace, monospace">test_pytest_class_attributes.py::TestExample::test_attr_is_changed
<font color="#ff0000">FAILED</font><br>
</font><font face="monospace, monospace">test_pytest_class_attributes.py::TestExample::test_attr_is_unchanged
PASSED</font><font face="monospace, monospace"><br>
</font><font face="monospace, monospace">===================================
FAILURES ===================================<br>
</font><font face="monospace, monospace">_______________________
TestExample.test_attr_is_changed _______________________</font><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace">self =
<test_pytest_class_attributes.TestExample object at
0x10dd98ef0></font><font face="monospace, monospace"><br>
</font><font face="monospace, monospace"> def
test_attr_is_changed(self):<br>
</font><font face="monospace, monospace"> """Test
whether attribute is changed."""<br>
</font><font face="monospace, monospace">> assert
self.attribute == 2<br>
</font><font color="#ff0000"><font face="monospace, monospace">E
assert 1 == 2<br>
</font><font face="monospace, monospace">E + where 1
= <test_pytest_class_attributes.TestExample object at
0x10dd98ef0>.attribute</font></font> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
color="#000000" face="monospace, monospace">test_pytest_class_attributes.py:14:
AssertionError<br>
</font><font color="#ff0000" face="monospace, monospace">======================
1 failed, 2 passed in 0.02 seconds ======================<br>
</font><font face="monospace, monospace">$</font></blockquote>
<div><font face="monospace, monospace"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif">Is there special
syntax or some special structure to make class attributes
behave In Pytest as they do in an ordinary Python class?
Example:</font></div>
<div><font face="monospace, monospace"><br>
</font></div>
<div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace"># display_class_attributes.py</font><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace">"""Test the setting
of class attributes."""</font> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace">class
TestExample():<br>
</font><font face="monospace, monospace"> def
__init__(self):<br>
</font><font face="monospace, monospace">
self.attribute = 1</font> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace"> def
test_changing_attr(self):<br>
</font><font face="monospace, monospace"> """Change
attribute on object."""<br>
</font><font face="monospace, monospace">
self.attribute = 2<br>
</font><font face="monospace, monospace"> assert
self.attribute == 2<br>
</font><font face="monospace, monospace">
print('Finished test_changing_attr.\n')</font> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace"> def
test_attr_is_changed(self):<br>
</font><font face="monospace, monospace"> """Test
whether attribute is changed."""<br>
</font><font face="monospace, monospace"> assert
self.attribute == 2<br>
</font><font face="monospace, monospace">
print('Finished test_attr_is_changed.\n')</font> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace"> def
test_attr_is_unchanged(self):<br>
</font><font face="monospace, monospace"> """Test
whether attribute is unchanged."""<br>
</font><font face="monospace, monospace"> assert
self.attribute == 1<br>
</font><font face="monospace, monospace">
print('Finiahed test_attr_is_unchanged.\n')</font> </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font
face="monospace, monospace"><br>
</font><font face="monospace, monospace">t = TestExample()<br>
</font><font face="monospace, monospace">t.test_changing_attr()<br>
</font><font face="monospace, monospace">t.test_attr_is_changed()<br>
</font><font face="monospace, monospace">t.test_attr_is_unchanged()</font></blockquote>
<div><font face="monospace, monospace"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif">Output:</font></div>
<div><font face="monospace, monospace"><br>
</font></div>
> $ python display_class_attributes.py<br>
><br>
> self.attribute == 2: True <br>
><br>
> self.attribute == 2: True<br>
><br>
> self.attribute == 1: False<br>
><br>
> $
<div><br>
</div>
<div>Thanks. </div>
</div>
<div><font face="monospace, monospace"><br>
</font></div>
<div><font face="monospace, monospace">- dpb</font></div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
testing-in-python mailing list
<a class="moz-txt-link-abbreviated" href="mailto:testing-in-python@lists.idyll.org">testing-in-python@lists.idyll.org</a>
<a class="moz-txt-link-freetext" href="http://lists.idyll.org/listinfo/testing-in-python">http://lists.idyll.org/listinfo/testing-in-python</a>
</pre>
</blockquote>
<br>
</body>
</html>