我在写一些字符串的类中有一个方法,它调用了另一个方法。例如:如何在java中为单元测试存根单个方法?
void foo() {
a += "xyx";
bar();
}
void bar() {
a += "abc";
}
对于单元测试目的,我想单独测试foo和bar。当我调用foo()或用其他方法替换它时,有没有办法阻止bar运行?
我在写一些字符串的类中有一个方法,它调用了另一个方法。例如:如何在java中为单元测试存根单个方法?
void foo() {
a += "xyx";
bar();
}
void bar() {
a += "abc";
}
对于单元测试目的,我想单独测试foo和bar。当我调用foo()或用其他方法替换它时,有没有办法阻止bar运行?
创建一个覆盖不执行任何操作的bar()的子类。
你为什么要这么做?您可以使用方面(不明智)在字节代码级别拦截代码;你可以拿一个叫bar的对象:void foo(MyBarObject m) { a += "xyx"; m.bar(); }
但是,正如我所说的,我想不出为什么这是有用的。单元测试旨在测试公共接口。如果bar()是私有的或受保护的,那么它会通过你的调用和后来的断言自动测试到foo()。如果foo()和bar()都是公共的,那么酷,测试他们分离。
你能发表一个真实的例子吗?你能改变被测试的代码吗?等
有人可能会争辩说,上面的例子是不可测试的代码。相反,如果代码是:
void foo() {
a += "xyx";
}
void bar() {
a += "abc";
}
void fooBar() {
foo();
bar();
}
它很容易进行单元测试。
客户端代码的外观如何?你如何实例化现在覆盖bar()的类。所以,你将不得不改变实例化新类的代码(或工厂)。正如我下面所说的,我认为我们需要更多关于这个问题的细节,具体来说,是否可以改变这个来源。 – 2009-06-30 21:43:47