1

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

4

2 回答 2

4

撇开是否应该测试私有方法的问题不谈,您可以通过以下方案之一获得这些方法:

  • 使用[info object namespace $inst]::my $methodname来调用它,它利用了这样一个事实,即您可以使用自省来找出真实的名称my(这保证有效;当您使用 , 和 Tk's 之类的命令进行回调时需要vwaittracebind
  • 用于为特定实例oo::objdefine $inst export $methodname公开方法。到那时,您可以照常进行。$inst $methodname

结果:您不应该将 TclOO 对象的私有方法用于必须受到严格保护的事物(与 Java 对象中的私有字段相比)。处理此类信息隐藏的正确级别是将其放在主解释器中(在安全的从属中评估不受信任的代码)或将受保护的信息保持在底层实现(即 C)级别。这两个中的最佳选择取决于您的程序的详细信息;通常很明显哪个是正确的选择(如果你只是在编写 Tcl 代码,你不会为此编写 C)。

于 2012-09-19T08:42:35.393 回答
3

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

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

如果您在其中一个私有方法中有一段复杂的代码,并且您觉得需要对其进行单独测试,请考虑将代码重构为两个单独的类。在两个类之一中公开需要测试的方法。

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

如果你需要关于重构的特定书名,我推荐 Robert C. Martin 的“Clean Code”。我喜欢那本书!

于 2012-09-19T07:14:08.623 回答