我在一个写一些字符串的类中有一个方法,它调用另一个执行相同操作的方法。类似的东西:
void foo() {
a += "xyx";
bar();
}
void bar() {
a += "abc";
}
出于单元测试目的,我想分别测试foo和bar。当我调用foo()或用另一种方法替换它时,有没有办法阻止bar运行?
答案 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();
}
单元测试很容易。