<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 =
            &lt;test_pytest_class_attributes.TestExample object at
            0x10dd98ef0&gt;</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">&gt;       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
              = &lt;test_pytest_class_attributes.TestExample object at
              0x10dd98ef0&gt;.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>
          &gt; $ python display_class_attributes.py<br>
          &gt;<br>
          &gt; self.attribute == 2: True <br>
          &gt;<br>
          &gt; self.attribute == 2: True<br>
          &gt;<br>
          &gt; self.attribute == 1: False<br>
          &gt;<br>
          &gt; $
          <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>