【问题标题】:White-box testing in Javascript - how to deal with privacy?Javascript中的白盒测试——如何处理隐私?
【发布时间】:2011-02-25 08:24:45
【问题描述】:

我正在为一个小型 Javascript 应用程序中的模块编写单元测试。为了保持接口干净,一些实现细节被匿名函数封闭(通常的 JS 隐私模式)。但是,在测试时,我需要访问/模拟/验证私密部分。

我之前编写的大多数测试都是在 Python 中进行的,其中没有真正的私有变量(成员、标识符,无论您想如何称呼它们)。一个简单地通过前导下划线为用户建议隐私,并在测试代码时随意忽略它。在静态类型的 OO 语言中,我想可以通过将私有成员转换为受保护的对象并对要测试的对象进行子类化,从而使测试可以访问私有成员。在 Javascript 中,后者不适用,而前者似乎是不好的做法。

我总是可以退回到黑盒测试并简单地检查最终结果。这是最简单、最干净的方法,但遗憾的是,它的详细程度不足以满足我的需求。

那么,有没有一种标准的方法可以在保持变量私有的同时仍然保留一些用于在 Javascript 中进行测试的后门?

【问题讨论】:

  • 嗯,我不喜欢别人嘲笑我的私处

标签: javascript unit-testing testing name-decoration


【解决方案1】:

没有。我不相信有。它基本上归结为您是采用封闭方法并放弃白盒测试还是进行白盒测试并为“私人”成员使用名称修饰。实际上不仅在 Python 中,在 javascript 中也有太多的项目使用不那么神奇的下划线来装饰 privates。所以在某种程度上,这已经是一个被广泛接受的解决方案。

如果您不希望这样做,并且真的非常需要白盒单元测试,那么您可以随时将测试集成到您的对象中。如果您对生产代码有单独的构建步骤(最小化、要求/提供解决方案等),那么您可以在此过程中删除测试功能。

【讨论】:

  • 好吧,看来我还是得做点装饰了。谢谢。将测试合并到主代码中并在构建期间删除是一个有趣的解决方案,但有点过于混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多