在运行单元测试时,读取不同属性集的正确方法是什么

Par*_*rag 3 java tdd

我想配置某些类(FactoryProviders)在单元测试中使用时表现不同.

public class ConnectionFactoryProvider {

    public static IConnectionFactory getConnectionFactory() {
        //return MockConnectionFactory if running in test mode and
        //DefaultConnectionFactory is running in production mode
    }

}
Run Code Online (Sandbox Code Playgroud)

我需要返回一个不同的ConnectionFactory,具体取决于代码是在测试模式(单元测试)还是生产模式下运行.

实现这一目标的正确方法是什么?我想到了一些可能的解决方案......但是其中任何一个都是被广泛使用的成语吗?

  • 通过JVM args的系统属性,使得在生产和测试模式下运行时,该值将不同.
  • 在工具属性文件中保留工厂的完全限定名称,并确保在测试模式下运行时,文件系统上有不同的属性文件.这对于Maven来说很容易,因为我们可以在测试阶段运行时控制类路径顺序,但我不确定在Eclipse中运行单元测试时是否可以实现.
  • 在测试设置方法中配置ConnectionFactoryProvider,以便返回MockConnectionFactory

Kam*_*one 5

依赖注入(DI).你的ConnnectionFactories是依赖项.DI将允许您将ConnectionFactory的实例作为构造函数参数发送.这样,单元测试将发送一个MockConnectionFactory实例,实时代码将发送一个DefaultConnectionFactory实例.

public class ConnectionFactoryProvider {
    public static IConnectionFactory getConnectionFactory(IConnectionFactory connectionFactory) {
    //use the connectionFactory
    }
}

//unit test
ConnectionFactoryProvider cfp = new ConnectionFactoryProvider(aMockConnectionFactoryInstance);

//live code
ConnectionFactoryProvider cfp = new ConnectionFactoryProvider(aDefaultConnectionFactoryInstance);
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

PS我是一名C#开发人员,但我认为Java语法或多或少与你相同.