2014-02-17 66 views
1

我寫了一個自定義的hamcrest匹配器,用於檢查列表中的文件是否已被複制。該列表可能很長(1000個文件+),所以如果缺少一個文件,我不希望匹配器打印出整個列表。pyhamcrest修改「got」說明

我可以爲丟失的文件進行自定義描述,但是有沒有辦法修改Got: <list of files>部分?

完整代碼:

class FilesHaveBeenCopied(BaseMatcher): 
    def __init__(self): 
     self.missing = None 

    def _matches(self, source_files): 
     try:    
      self.missing = next(f for f in source_files if not os.path.exists(target_of(f))) 
     except StopIteration: 
      return True 
     return False 

    def describe_to(self, description):    
     description.append_text("file to be copied '{0}'".format(self.missing)) 

def have_been_copied(): 
    return FilesHaveBeenCopied() 

用法:

assert_that(self.source_files, have_been_copied()) 

回答

1

覆蓋describe_mismatch覆蓋全部實際值:

def describe_mismatch(self, actual, description): 
    description.append(self.missing) 

describe_to應該描述的預期值 - 而不是缺失值。或者也許它應該報告像「21個現有文件列表」這樣的文件數量。

+1

完美。我將它作爲一個類成員實現:'describe_mismatch(self,actual,description)'。完全按照我的意願工作,謝謝! – Stefan

+0

@斯特凡非常棒,謝謝。自從我使用Python以來,這已經太久了。 :) –