请原谅我的noob状态,但是我遇到了一个我不太理解的结构,希望有人能为我解释一下。在
class Base(object):
def mogrify(self, column):
return self.mogrifiers.get(column.lower().strip()) or (lambda x: x)
。。。在
^{pr2}$。。。在
class MyOtherClass(object):
def convert_columns:
...
new_row[colkey] = self.myclass.mogrify(colkey)(value)
这一切都可以,但我正在尝试编写一个单元测试并模拟MyClass
。在
据我所知,mogrifiers返回一个包含所有列和所需转换的字典。在
我测试的代码调用mogrify(从基类继承)字符串中有一个特定的列名。在
这将尝试从字典中提取列并返回lambda函数?或者如果字典中不存在它,它会返回一个lambda来返回字符串?在
所以在我要测试的代码中只剩下(value)位。不清楚它是干什么的。在
如果我不想测试底层的转换/转换,mock可以返回简单的lambda。在
所以我已经这么做了,但在给莫格里菲的电话中却出现了一个例外:
E TypeError: 'str' object is not callable
有人能提供一些线索吗?在
这是正确的,尽管正如你所展示的那样,它每次都会创建一个新的字典,这似乎是不必要的。在
是的,这也是正确的(除了lambada是一种舞蹈,但我想你是指lambda)。在
{{cda>只返回调用。如果我这样重写,可能会更清楚:
将其拆分为两行也可以使问题更清楚是调用}。如果很可能是
self.myclass.mogrify(colkey)
还是{fn(value)
调用,则表示mocked mogrify返回的是一个str
,而不是返回一个可调用的;但是,也可能是因为您弄错了mock,mogrify
方法实际上是一个字符串。在我建议您重写如图所示,并在两行之间插入一个
print
,看看实际返回的是什么。在相关问题 更多 >
编程相关推荐