在我的大多数应用程序中,我都有一个单例或静态“ config”对象,负责从磁盘读取各种设置。几乎所有的类都出于各种目的使用它。本质上,这只是名称/值对的哈希表。它是只读的,因此我不必太担心我拥有如此多的全局状态。但是现在我开始进行单元测试,这开始成为一个问题。
一个问题是您通常不希望使用与运行时相同的配置进行测试。有两种解决方案:
- 为config对象提供一个仅用于测试的设置器,以便您可以传递不同的设置。
- 继续使用单个配置对象,但是将其从单例更改为一个实例,您可以在需要的任何地方进行传递。然后,您可以使用不同的设置在应用程序中一次构造它,并在测试中一次构造它。
但是无论哪种方式,您仍然面临第二个问题:几乎任何类都可以使用config对象。因此,在测试中,您需要为要测试的类及其所有依赖项设置配置。这会使您的测试代码很难看。
我开始得出这样的配置对象是个坏主意的结论。你怎么看?有哪些替代方案?以及如何开始重构在各处使用配置的应用程序?