三颗纽扣

世界上最宽广的是海洋,比海洋更宽广的是天空,比天空更宽广的是人的胸怀

导航

用匿名类实现Mock

终于发现Java的一个好处了,在Java中,除非你明确声明一个类或者方法是封闭的,否则就可以继承这个类并重载公开的方法,而在DotNet中正好相反,你必须明确的声明一个方法是virtual的才能被重载。谁没事给每个公开方法都去声明一个virtual啊?

 

Java的这个特性,在单元测试时就非常有用了,可以非常简单的实现一个Mock,而不需要引入所谓的JMock之类的第三方Mock包,而且对一般的单元测试而言,足够用了。

 

例如:我们要测试类的方法:

class A {

  B objB;

  public void foo() {

      ...

      objB.fooB();

      ...

  }

}

 

由于在 foo 中调用了 objB.fooB(),一般情况下,我们应该Mock这个方法以隔离 fooB。单元测试可以这样写:

public testFoo() {

  A targert = new A();

  targer.objB = new B() {

     @override int fooB() {

         return 0;

     }

  };

  target.foo();

}

 

直接将声明一个匿名类继承 class B, 并重载 fooB() 方法即可。

posted on 2008-09-08 16:05  三颗纽扣  阅读(736)  评论(0编辑  收藏  举报