> From: "C.D. Reimer" <ch...@cdreimer.com>
> Greetings,
> 
> I'm writing a chess engine to learn about Python classes and
> inheritance, and using pytest for the unit test. 
[snip]
> I tried to create a separate class and/or module to import the common
> tests for each class and subclass. My attempts often ended in failure
> with the "RuntimeError: super(): no arguments" message. I couldn't
> find
> a working example on the Internet on how to do that. The pytest
> documentation is all over the place.
> 
> Is there a way to reuse tests in pytest?
> 
> Or should I test everything in the class and test only the
> implemented
> functionality in the subclasses?
> 
> Thank you,
> 
> Chris R.

I've played a little bit with pytest, I was interested in trying since it 
claims to add less boilerplate than unittest.
I've created 2 classes, Piece and Queen, both have the 'isPiece' and 'name' 
property (for the sake of demo).

If you execute the code (python 2.7) with pytest, you'll see that the TestQueen 
class actually execute 2 tests, one inherited from its base test class 
TestPiece.
So in the end, I'd say that you may put all common tests in TestPiece, and each 
specific implementation into TestQueen.


import pytest

class Piece(object):
        @property
        def isPiece(self): #for the sake of demo
                return True
        @property
        def name(self):
                raise NotImplementedError # Piece is a sort of abstract class

class Queen(Piece):
        @property
        def name(self):
                return 'Queen'

class TestPiece(object):
        cls = Piece
        def test_isPiece(self):
                assert self.cls().isPiece
        def test_name(self):
                with pytest.raises(NotImplementedError):
                        assert self.cls().name

class TestQueen(TestPiece):
        cls = Queen
        def test_name(self):
                assert self.cls().name == 'Queen'


py.test test.py
platform linux2 -- Python 2.7.3 -- py-1.4.20 -- pytest-2.5.2
4 passed in 0.01 seconds


-- IMPORTANT NOTICE: 

The contents of this email and any attachments are confidential and may also be 
privileged. If you are not the intended recipient, please notify the sender 
immediately and do not disclose the contents to any other person, use it for 
any purpose, or store or copy the information in any medium. Thank you.
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to