简而言之,这是我要测试的课程。查看是否使用'english'创建了Tokenizer('english')。
def summarize(news):
language = 'english'
parser = PlaintextParser.from_string(news.body, Tokenizer(language))
这是测试
@mock.patch.object(PlaintextParser, 'from_string')
@mock.patch('sumy.nlp.tokenizers.Tokenizer')
def test_summarize_tokenizer_is_called_with_english(self, token_mock, parser_mock):
news_mock = mock.MagicMock()
body = u"xx"
type(news_mock).body = mock.PropertyMock(return_value=body)
Summarizer.summarize(news_mock)
token_mock.assert_called_with('english')
我不断得到:
AssertionError: Expected call: Tokenizer('english')
Not called
但这应该过去了。我想念什么?
这是嘲弄的棘手部分。需要注意的是你打补丁Tokenizer
的sumy.nlp.tokenizers
命名空间。但是,大概您有一个类似于以下内容的import语句:
from sumy.nlp.tokenizers import Tokenizer
在带有的模块中Summarizer
。这也将Tokenizer
in放在该模块的名称空间中。在其他(sumy.nlp.tokenizers
)名称空间中进行修补不会影响Tokenizer
此处。
解决此问题的一种方法是使用以下命令更改模块中的import语句Summarizer
:
from sumy.nlp import tokenizers
那么您的函数将变为:
def summarize(news):
language = 'english'
parser = PlaintextParser.from_string(news.body, tokenizers.Tokenizer(language))
另一种解决方案,可能的工作是简单地修补Tokenizer
中的命名空间Summarizer
(不过,也有更多的细微之处这里...)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句