我正在为一个小型Javascript应用程序中的模块编写单元测试。为了保持界面整洁,一些实现细节由匿名函数(用于保护隐私的常用JS模式)关闭。但是,在测试时,我需要访问/模拟/验证私有(private)部分。
我之前编写的大多数测试都是在Python中进行的,其中没有真正的私有(private)变量(成员,标识符,以及您想调用的任何变量)。一个简单的建议是通过为用户提供一个下划线来表示隐私,并在测试代码时自由地忽略它。我猜想在静态类型的OO语言中,可以通过将私有(private)成员转换为 protected 对象并将其子类化来使其对测试可访问。在Javascript中,后者不适用,而前者似乎是不好的做法。
我总是可以退回到黑盒测试中,而只是检查最终结果。这是最简单,最干净的方法,但不幸的是,它不够详细,无法满足我的需求。
因此,是否存在一种标准的方法来保持变量私有(private),同时仍保留一些后门以供Javascript测试?
最佳答案
不,我不相信那里。基本上可以归结为您采用封闭方法,放弃白盒测试还是进行白盒测试并为“私有(private)”成员使用名称修饰。实际上,不仅在Python中,而且在javascript中,太多项目都使用不太魔术的下划线装饰私有(private)对象。因此,从某种意义上说,这已经是解决该问题的一种广泛接受的解决方案。
如果您确实不希望这样做,那么真的可以将测试集成到您的对象中。如果您有用于生产代码的单独构建步骤(最小化,需求/提供分辨率等),则可以在此过程中删除测试功能。