2009-06-30 87 views
2

我在写一些字符串的类中有一个方法,它调用了另一个方法。例如:如何在java中为单元测试存根单个方法?

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

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

对于单元测试目的,我想单独测试foo和bar。当我调用foo()或用其他方法替换它时,有没有办法阻止bar运行?

回答

8

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

+0

客户端代码的外观如何?你如何实例化现在覆盖bar()的类。所以,你将不得不改变实例化新类的代码(或工厂)。正如我下面所说的,我认为我们需要更多关于这个问题的细节,具体来说,是否可以改变这个来源。 – 2009-06-30 21:43:47

1

你为什么要这么做?您可以使用方面(不明智)在字节代码级别拦截代码;你可以拿一个叫bar的对象:void foo(MyBarObject m) { a += "xyx"; m.bar(); }

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

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

1

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

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

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

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

它很容易进行单元测试。