TypeError:在使用Python从TDDBE实践TDD示例时,解除了方法_init__;()的绑定
我现在正在使用Kent Beck编写的测试驱动开发示例,通过python实践TDD。根据这个示例,我编写了与TDDBE中的示例相同的代码TypeError:在使用Python从TDDBE实践TDD示例时,解除了方法_init__;()的绑定,python,unit-testing,tdd,Python,Unit Testing,Tdd,我现在正在使用Kent Beck编写的测试驱动开发示例,通过python实践TDD。根据这个示例,我编写了与TDDBE中的示例相同的代码 class TestCase: def __init__(self, name): self.name = name def run(self): exec "self." + self.name + "()" class WasRun: def __init__(self, name):
class TestCase:
def __init__(self, name):
self.name = name
def run(self):
exec "self." + self.name + "()"
class WasRun:
def __init__(self, name):
self.wasRun = None
TestCase.__init__(self, name)
def testMethod(self):
self.wasRun = 1
test = WasRun("testMethod")
print test.wasRun
test.run()
print test.wasRun
但是当我运行此代码时,我发现以下错误消息
Traceback (most recent call last):
File "/Users/sanghee/PycharmProjects/test/test.py", line 17, in <module>
test = WasRun("testMethod")
File "/Users/sanghee/PycharmProjects/test/test.py", line 11, in __init__
TestCase.__init__(self, name)
TypeError: unbound method __init__() must be called with TestCase instance as first argument (got WasRun instance instead)
Process finished with exit code 1
回溯(最近一次呼叫最后一次):
文件“/Users/sanghee/PycharmProjects/test/test.py”,第17行,在
test=WasRun(“testMethod”)
文件“/Users/sanghee/PycharmProjects/test/test.py”,第11行,在__
TestCase.\uuuuu init\uuuuu(self,name)
TypeError:必须使用TestCase实例作为第一个参数调用未绑定的方法_uinit__;()
进程已完成,退出代码为1
你能告诉我有什么问题吗?为什么?Make
WasRun
测试用例的a类子类:
class WasRun(TestCase):
现在,self
是TestCase
的一个子类
请注意,您引用的代码并不完全是最佳实践;我将重写它,至少使用新样式的类,使用super()
调用超类初始值设定项,并避免exec
语句:
class TestCase(object):
def __init__(self, name):
self.name = name
def run(self):
getattr(self, self.name)()
class WasRun(TestCase):
def __init__(self, name):
self.wasRun = False
super(WasRun, self).__init__(name)
def testMethod(self):
self.wasRun = True
为什么您在练习TDD时没有使用
unittest
模块?它已经提供了TestCase
,TestSuite
类以及所有assert
,setUp
,tearDown
等方法。你正在重新发明轮子…嗨,巴库留,我只是在TDDBE中遵循这个例子。谢谢你的意见。我试试看。:)谢谢Martijn Pieters。我完全理解你说的话。尤其是getatter而不是exec对我来说很好,而且更直观。谢谢