【发布时间】:2012-05-31 12:57:44
【问题描述】:
我想将某些类(FactoryProviders)配置为在单元测试中使用时表现不同。
public class ConnectionFactoryProvider {
public static IConnectionFactory getConnectionFactory() {
//return MockConnectionFactory if running in test mode and
//DefaultConnectionFactory is running in production mode
}
}
我需要根据代码是在测试模式(单元测试)还是生产模式下运行,返回不同的 ConnectionFactory。
实现这一目标的正确方法是什么?我想到了一些可能的解决方案……但其中任何一个是广为流传的成语吗?
- 通过 JVM 参数的系统属性,这样在生产和测试模式下运行时值会有所不同。
- 将工厂的完全限定名称保存在属性文件中,并确保在测试模式下运行时文件系统上有不同的属性文件可用。这在 Maven 中很容易做到,因为我们可以在测试阶段运行时控制类路径顺序,但我不确定在 Eclipse 中运行单元测试时是否可以实现。
- 在测试设置方法中配置 ConnectionFactoryProvider,使其返回 MockConnectionFactory
【问题讨论】:
-
您考虑过使用mocking framework吗?
-
assylias 是对的。一个模拟框架会很有帮助。
-
@assylias 我同时使用了 Mock 和假对象。我正在考虑是否可以以足够小的方式梳理设计,这样我就可以将代码放在这里而不会变得太复杂。