即两个类:
class A{
public int getValue(){
return 5;
}
}
class B{
public int getValue(){
A a = new A();
return a.getValue();
}
}
现在我想为 B 类 编写测试,但我想为该测试模拟 A 类。问题是:如何?
(这个片段只是我问题的一个简单版本,请不要小心返回 5 或 smth)
最佳答案
可能有一些棘手的方法可以做到这一点,但简而言之,您编写 B
的方式不利于模拟。不要在 B 中实例化 A,而是尝试将 A 注入(inject) B
考虑改成
class B {
private A a;
public void setA(A a) {
this.a=a;
}
public int getValue(){
return a.getValue();
}
}
您甚至可以通过 private A a = new A()
来初始化 a
,但是提供一个 setter 允许您注入(inject)模拟以进行测试。
编辑:如果重写 B 使其单元测试友好有困难,您仍然可以使用将执行字节码操作的模拟框架,如 Powermock。这是实现您想要的目标的示例:
关于java - JUnit - 测试方法中使用的模拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18715717/