如何在java中为单元测试存根个体方法?

时间:2009-06-30 21:21:00

标签: java unit-testing stub

我在一个写一些字符串的类中有一个方法,它调用另一个执行相同操作的方法。类似的东西:

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

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

出于单元测试目的,我想分别测试foo和bar。当我调用foo()或用另一种方法替换它时,有没有办法阻止bar运行?

3 个答案:

答案 0 :(得分:8)

创建一个覆盖不执行任何操作的bar()的子类。

答案 1 :(得分:1)

你为什么要这样做?

你可以使用方面拦截字节码级别的代码(不明智);你可以接受一个调用bar的对象:void foo(MyBarObject m) { a += "xyx"; m.bar(); }

但是,正如我所说,我不明白为什么这有用。单元测试用于测试公共接口。如果bar()是私有的或受保护的,那么它会通过你的调用和后来的断言自动测试到foo()。如果foo()和bar()都是公共的,那么很酷,请将它们分开测试。

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

答案 2 :(得分:1)

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

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

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

void fooBar() {
  foo();
  bar();
}

单元测试很容易。