在运行某些JUnit测试时如何替换某个类?

时间:2012-01-27 20:29:03

标签: java junit mocking

我正在使用Java 6和JUnit 4.8.1(以及Maven 3.0.3)。对于某些JUnit测试,我想用我自己的这个类版本(具有相同的公共方法签名)替换某些测试所依赖的类(限定为com.myco.clearing.product.server.cache) 。这样做的优雅方式是什么?

请注意,某些JUnit测试不直接调用com.myco.clearing.product.server.cache.Cache类,而是调用依赖此类的类。即使在这些间接情况下,我也希望使用我的类版本。

感谢您提供这些方面的任何帮助, - Dave

1 个答案:

答案 0 :(得分:2)

很难说完全在这里做什么,但总的来说:

  1. 使用一些IoC技术 - 构造函数,setter注入。

  2. 我建议使用模拟框架来模拟你的对象 的Mockito。

  3. 因此,例如,如果您有一个使用com.myco.clearing.product.server.cache.Cache的课程,我们就称之为Foo。你现在就这样使用:

    class Foo {
     private Cache _cache = new Cache( ... );
    }
    

    如果可能,请将其更改为以下内容:

    class Foo {
        private Cache _cache;
    
        public Foo( Cache cache ) {
          _cache = cache;
        }
    
        public Foo() {
          this( new Cache() );
        }
    }
    

    然后你可以注入Cache类的模拟版本。我说“可能”,因为它取决于Cache类。如果它是最终的,有一堆静态方法等,那么你还有更多要处理的事情。