[Python-de] Frage zu Testabdeckung und Verantwortlichkeiten der jeweiligen Testklasse

Peter Otten __peter__ at web.de
Fr Dez 20 13:46:53 CET 2013


Thomas Lehmann wrote:

>> Und ansonsten bleibt die Erkenntnis, das coverage nicht alles ist...
>> 
>> 
>> 
>> - Arnold
> 
> Ich haben einen Weg gefunden und dies gerade als Rezept veröffentlich:
> http://code.activestate.com/recipes/578793-more-struct-unit-tests-using-a-validator/
> 
> Viel Spass

Interessant!

Hier eine Alternative, die nur meckert, wenn die unit tests ausführt werden, 
statt gleich eine Exception zu werfen:

    def verify(self, testClass):
        """Add a failing test for each testable method without corresponding test method.
        """
        methodsInTestClass\
            = ValidateTestResponsibilityFor.getEntries(testClass, inspect.isfunction)\
            + ValidateTestResponsibilityFor.getEntries(testClass, inspect.ismethod)

        for testableMethod in self.methodsInTestableClass:
            testMethod = ValidateTestResponsibilityFor.getTestMethod(testableMethod)
            if testMethod not in methodsInTestClass:
                setattr(testClass, testMethod,
                    make_fail(testMethod, self.testableClass.__name__ + "." + testableMethod))

def make_fail(testname, methodname):
    """Create a failing test method.

    Example:
    def testWhatever(self)
        self.fail("No test method " 'whatever')
    """
    # Das geht sicher auch besser ohne exec()...
    ns = {}
    exec ("""\
def %s(self):
    self.fail("No test method for " %r)
""" % (testname, methodname), ns)
    return ns[testname]




Mehr Informationen über die Mailingliste python-de