TestCaseカスタムassertメソッドをサブクラスに追加したいと思います。モジュールから実装をコピーして、通常の動作にできるだけunittest一致するようにしました。TestCase(私は単に委任したいself.assertEqual()のですが、これによりさらに多くのバックトレースノイズが発生します。以下を参照してください。)unittest失敗したアサーションを報告すると、モジュールは実装の内部詳細を自動的に非表示にするようです。
import unittest
class MyTestCase(unittest.TestCase):
    def assertLengthIsOne(self, sequence, msg=None):
        if len(sequence) != 1:
            msg = self._formatMessage(msg, "length is not one")
            raise self.failureException(msg)
class TestFoo(MyTestCase):
    seq = (1, 2, 3, 4, 5)
    def test_stock_unittest_assertion(self):
        self.assertEqual(len(self.seq), 1)
    def test_custom_assertion(self):
        self.assertLengthIsOne(self.seq)
unittest.main()
これの出力は次のとおりです。
amoe@vuurvlieg $ python unittest-demo.py
FF
======================================================================
FAIL: test_custom_assertion (__main__.TestFoo)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "unittest-demo.py", line 16, in test_custom_assertion
    self.assertLengthIsOne(self.seq)
  File "unittest-demo.py", line 7, in assertLengthIsOne
    raise self.failureException(msg)
AssertionError: length is not one
======================================================================
FAIL: test_stock_unittest_assertion (__main__.TestFoo)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "unittest-demo.py", line 13, in test_stock_unittest_assertion
    self.assertEqual(len(self.seq), 1)
AssertionError: 5 != 1
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=2)
カスタムassertメソッドでは、2つのフレームを持つスタックトレースが発生します。1つはメソッド自体の内部にありますが、stockunittestメソッドには1つのフレーム、つまりユーザーのコードの関連行しかありません。このフレーム非表示の動作を自分のメソッドに適用するにはどうすればよいですか?