2016-07-16 9 views
0

assert nicht eine Ausnahme ausgelöst, wenn in einer Instanz einer Klasse aufgerufen:assert funktioniert nicht, wenn in der Klasse Instanz angehoben

class TestCaseTest(TestCase): 
    ... 
    def testFailedResutFormatted(self): 
     ... 
     assert False # This doesn't work at all 

TestCaseTest("testFailedResutFormatted").run() 
assert False # But this works just fine 

Voll Code kann hier gesehen werden: http://pastebin.com/Hc9CTTxH

Ich bin offensichtlich etwas falsch machen, denn das sind Beispiele aus dem Buch und sie sollten funktionieren. Ich kann einfach nicht herausfinden, was los ist.

Antwort

0

Die assert False arbeitet gerade fein, aber die AssertionError durch die TestCase.run() Methode gefangen wird, später gesammelt werden.

Sie nicht in einer TestResult Instanz, so in Python 3 die TestCase.run() Funktion gibt ein neues Ergebnisobjekt für Sie bestanden haben:

>>> from unittest import TestCase 
>>> class TestCaseTest(TestCase): 
...  def testFailedResutFormatted(self): 
...   assert False 
... 
>>> tc = TestCaseTest("testFailedResutFormatted") 
>>> tc.run() 
<unittest.result.TestResult run=1 errors=0 failures=1> 

Dort sehen Sie ein Fehler aufgezeichnet wurde.

Übergeben Sie eine TestResult Instanz an die TestCase.run() Methode und es wird stattdessen verwendet; Das result.failures Attribut zeigt die Assertion gefeuert und wurde aufgezeichnet:

>>> from unittest import TestResult 
>>> result = TestResult() 
>>> tc.run(result) 
>>> result 
<unittest.result.TestResult run=1 errors=0 failures=1> 
>>> result.failures 
[(<__main__.TestCaseTest testMethod=testFailedResutFormatted>, 'Traceback (most recent call last):\n File "<stdin>", line 3, in testFailedResutFormatted\nAssertionError\n')] 
>>> print result.failures[0][1] 
Traceback (most recent call last): 
    File "<stdin>", line 3, in testFailedResutFormatted 
AssertionError 
+0

Das ist genau das, was ich gesucht habe, vielen Dank! –

Verwandte Themen