2016-04-26 11 views
1

Ich versuche str für Standard PyHamcrest Matcher für loggin Zwecke zu erhalten:Python 2.7 PyHamcrest 1.8.5 Matchers mit Unicode-Symbolen

from hamcrest import equal_to 

print str(equal_to('string')) 
print unicode(equal_to(u'❤')) 

Zweiter Druck schlägt fehl, da Matcher eine "str" ​​hat innen nennen. ich es mit dieser Klasse gelöst:

class UnicodeIsEqual(IsEqual): 
    def __str__(self): 
     return unicode(StringDescription().append_description_of(self)) 

print unicode(UnicodeIsEqual(u'❤')) 

Gibt es einen besseren Weg, es zu tun, ohne das Erstellen von benutzerdefinierten Matcher?

Antwort

0

es wurde gelöst durch Wrapper-Klasse verwendet wird, bei Bedarf:

class UnicodeMatcherWrapper(object): 
    def __init__(self, matcher): 
     if hasattr(matcher, 'matcher'): 
      matcher.matcher = UnicodeMatcherWrapper(matcher.matcher) 

      if hasattr(matcher, 'matchers'): 
       matcher.matchers = [UnicodeMatcherWrapper(nested_matcher) for nested_matcher in matcher.matchers] 

     self.matcher = matcher 

    def __getattr__(self, item): 
     return getattr(self.matcher, item) 

    def __str__(self): 
     return unicode(StringDescription().append_description_of(self.matcher))