2013-03-24 82 views
0

考虑以下来自Kent Beck的书中的Python代码:Test Driven Development第18章他正在构建单元测试框架。为什么run()方法调用两次来运行测试用例?

class TestCaseTest(TestCase): 
    def testRunning(self): 
     test= WasRun("testMethod") 
     assert(not test.wasRun) 
     test.run() // Here run() is called once 
     assert(test.wasRun) 
    TestCaseTest("testRunning").run()//Here run() is called again 

基类TestCase的实现如下所示:

TestCase 
def __init__(self, name): 
    self.name= name 
def run(self): 
    method = getattr(self, self.name) 
    method() 
  1. 为什么在上面的代码片段被调用两次run()方法?
  2. 谁在调用方法testRunning()什么时候?这里只是定义方法,但似乎没有人调用这种方法。

P.S:我来自Java背景,对Python语法本身并不熟悉。

回答

1

我没有权限访问您正在讨论的书,因此我要将您发布的代码片断。

看起来像两个不同对象上的run()方法被调用 - 类TestCaseTest之一,类WasRun之一(或任何名为WasRun返回的函数)之一。

至于谁在调用testRunning(),则在TestCaseTest对象上调用.run(),这大概是来自超类TestCase的方法。在TestCase中查找run()并查看self.testRunning()是否在那里调用。

+0

我已经添加了基准类的代码供您细读。看来我现在明白了。运行方法的最后一行是关键。 – Inquisitive 2013-03-24 15:53:38

+0

好吧,所以有一个方法是基于self.name属性检索和运行的。运行哪种方法取决于TestCase如何初始化,如果self.name是“hello”,那么调用的方法是self.hello()。很高兴听到它在上下文中对你有意义。 – svk 2013-03-24 16:06:55

+0

顺便说一句,这是在Python中称为*可插入选择器*的机制? – Inquisitive 2013-03-24 16:12:37