Python test-cases: readable errors output for non-latin unicode strings

Если в тестах есть сообщения в которых встречаются нелатинские символы, например кириллица, то они будут выводиться закодированными кодеком 'unicode_escape' что часто весьма неудобно. Но это можно решить. За основу взят код из реализации альтернативного pprint, т.к. у оригинального ``pprint.pprint`` такая же "проблема" с выводом не латиницы.

Initial code:

            self.assertEqual(
                normalizer.some_method(one_string, other_string, strict),
                expected_result,
                msg=u"normalizer.some_method({0!r}, {1!r}, {2!r}) != {3!r}".format(one_string, other_string, strict, expected_result)
            )

This will result in error like this:

AssertionError: normalizer.some_method(u'\u041c\u043e\u0441\u043a\u0432\u0430, 5-\u0433\u043e \u041c\u0430\u044f, 25', u'\u041c\u043e\u0441\u043a\u0432\u0430 \u0433, \u0443\u043b \u041c\u0430\u044f, 25, 12', True) != True
This is hard to read (u'\u043d\u0435\u0447\u0438\u0442\u0430\u0435\u043c\u043e' vs u'нечитаемо'). Way to fix it:
            self.assertEqual(
                normalizer.check_numerics_equal(one_string, other_string, strict),
                expected_result,
                msg=u"normalizer.check_numerics_equal({0!r}, {1!r}, {2!r}) != {3!r}".format(one_string, other_string, strict, expected_result).decode('unicode_escape').encode(getattr(sys.stdout, 'encoding', None) or 'utf-8')  # sys.stdout.encoding may be replaced with StringIO instance in nose tests and it does not have "encoding" attribute
            )

This will give better results:

AssertionError: normalizer.some_method(u'Москва, 5-го Мая, 25', u'Москва г, ул Мая, 25, 12', True) != True

You can overload _formatMessage method of TestCase to make this all easier:

import sys


class BaseTestCase(TestCase):
    def _formatMessage(self, msg, standardMsg):
        if isinstance(msg, unicode):
            msg = msg.decode('unicode_escape').encode(getattr(sys.stdout, 'encoding', None) or 'utf-8')
        return super(BaseTestCase, self)._formatMessage(msg, standardMsg)

class SomeTestCase(BaseTestCase):
    def test_some_method(self):
        # ...
            self.assertEqual(
                normalizer.check_numerics_equal(one_string, other_string, strict),
                expected_result,
                msg=(
                    u'normalizer.some_method({0!r}, {1!r}, {2!r}) != {3!r}'
                    .format(one_string, other_string, strict, expected_result)
                    .decode('unicode_escape')
                    .encode(getattr(sys.stdout, 'encoding', None) or 'utf-8')  # sys.stdout.encoding may be replaced with StringIO instance in nose tests and it does not have "encoding" attribute
                )
            )