如何在TCl中测试私有方法

时间:2012-09-19 06:31:23

标签: unit-testing testing tcl

我很抱歉,如果这个问题看起来很愚蠢,我是TCL和TCLtest的新手,我正在尝试对一些TCLOO程序进行单元测试,而且我在测试私有方法时遇到了困难(使用关键字调用的方法) '我的')。需要指导

2 个答案:

答案 0 :(得分:4)

撇开您是否测试私有方法的问题,您可以通过以下方案之一获取方法:

  • 使用[info object namespace $inst]::my $methodname来调用它,这利用了这样一个事实:您可以使用内省来找出my的真实姓名(并且保证可以正常工作;当您需要时,它是必需的使用vwaittrace和Tk的bind等命令进行回调。
  • 使用oo::objdefine $inst export $methodname为特定实例创建方法public 。此时,您可以照常执行$inst $methodname

后果:您不应该使用TclOO对象的私有方法来保护 的内容(与Java对象中的私有字段相比) )。处理这种信息覆盖的正确级别是将其置于主解释器中(不可信代码在safe slave中进行评估)或将受保护信息保持在底层实现(即C)级别。这两者的最佳选择取决于您的计划的细节;通常很明显哪个是正确的选择(如果您只是编写Tcl代码,则不要为此编写C语言。)

答案 1 :(得分:3)

这可能看起来像OT,但请耐心等待。

您确定必须测试私有方法吗?这听起来像测试实现,这是你不应该做的事情。您应该测试您的类的行为,并通过其公共方法进行测试。

如果您在其中一个私有方法中有一个复杂的代码块,并且您认为需要进行特定的测试,请考虑将代码重构为两个单独的类。在两个类中的一个中创建需要公开测试的方法。

这样你就可以避免拥有能完成所有事情的“神级”,并且可以测试你想测试的内容。您可能想要阅读有关单一责任原则的更多信息。

如果您需要有关重构的特定书名,请推荐Robert C. Martin的“清洁代码”。我爱那本书!