2

我在一个写入某个字符串的类中有一个方法,它调用另一个执行相同操作的方法。就像是:

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

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

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

4

3 回答 3

8

创建一个覆盖 bar() 的子类,它什么都不做。

于 2009-06-30T21:23:08.790 回答
1

你为什么想这么做?

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

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

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

于 2009-06-30T21:38:03.783 回答
1

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

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

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

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

单元测试很容易。

于 2009-06-30T22:06:00.500 回答