【发布时间】:2009-08-19 18:19:20
【问题描述】:
我实际上正在尝试在 Java 中执行此操作,但我正在自学 python,这让我想知道是否有一种简单/聪明的方法可以使用包装器或其他东西来做到这一点。
我想知道一个特定方法在另一个方法中被调用了多少次。例如:
def foo(z):
#do something
return result
def bar(x,y):
#complicated algorithm/logic involving foo
return foobar
因此,对于使用各种参数对 bar 的每次调用,我想知道 foo 被调用了多少次,可能输出如下:
>>> print bar('xyz',3)
foo was called 15 times
[results here]
>>> print bar('stuv',6)
foo was called 23 times
[other results here]
编辑:我意识到我可以在吧台内放一个柜台,然后当我返回时将其倾倒,但如果你可以用包装器做一些魔法来完成同样的事情,那就太酷了。这也意味着我可以在其他地方重用相同的包装器,而无需修改方法内的任何代码。
【问题讨论】:
-
在Java中你可以用一个方面来做,使用cflow检查调用方法和call匹配方法来计数,然后实现周围的建议以增加每个匹配方法的计数器(可能使用方法签名和计数的映射)
-
或只计算调用,只需匹配 execution 而不是使用 cflow 和 call
-
我打算给你介绍一个 Pyhon 代码覆盖工具 (coverage.py),因为它肯定包含对你想做的事情有用的技术。但后来作者本人(嗨,内德!)回答了你的问题。无论如何,你可能想看看nedbatchelder.com/code/coverage。
-
你好 df!具有讽刺意味的是,我没有提到coverage.py...