Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeError:在使用Python从TDDBE实践TDD示例时,解除了方法_init__;()的绑定_Python_Unit Testing_Tdd - Fatal编程技术网

TypeError:在使用Python从TDDBE实践TDD示例时,解除了方法_init__;()的绑定

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):

我现在正在使用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):
        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对我来说很好,而且更直观。谢谢