代码之家  ›  专栏  ›  技术社区  ›  swampsjohn

如何在Java中截取一个用于单元测试的单独方法?

  •  2
  • swampsjohn  · 技术社区  · 15 年前

    我在一个类中有一个方法正在写入某个字符串,它调用另一个方法,该方法的作用相同。类似:

    void foo() {
      a += "xyx";
      bar();
    }
    
    void bar() {
      a += "abc";
    }
    

    为了进行单元测试,我想分别测试foo和bar。当我调用foo()时,是否有任何方法可以阻止运行bar,或者用另一个方法替换它?

    3 回复  |  直到 15 年前
        1
  •  8
  •   Egwor    15 年前

    创建一个子类,该子类重写不执行任何操作的bar()。

        2
  •  1
  •   Adrian Mouat    15 年前

    你为什么要这么做?

    您可以使用方面(而不是wise)在字节代码级别截取代码;您可以接受调用bar的对象: void foo(MyBarObject m) { a += "xyx"; m.bar(); }

    但是,正如我所说,我想不出为什么这是有用的。单元测试旨在测试公共接口。如果bar()是私有的或受保护的,那么它将通过对foo()的调用和稍后的断言自动进行测试。如果foo()和bar()都是公共的、酷的,那么分别测试它们。

    你能发布一个真实的例子吗?你能改变测试中的代码吗?等。

        3
  •  1
  •   dcoke23    15 年前

    有人可能会说上面的示例不是可测试的代码。相反,如果代码是:

    void foo() {
      a += "xyx";
    }
    
    void bar() {
      a += "abc";
    }
    
    void fooBar() {
      foo();
      bar();
    }
    

    单元测试很容易。