即两个类:
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 注入 B
考虑将其更改为
class B {
private A a;
public void setA(A a) {
this.a=a;
}
public int getValue(){
return a.getValue();
}
}
你甚至可以a
通过初始化private A a = new A()
,但是提供一个 setter 允许你注入一个 mock 进行测试。
编辑:如果在重写 B 以使其对单元测试友好时遇到困难,您仍然可以使用将进行字节码操作的模拟框架,如 Powermock。这是实现您想要的示例:
模拟可以使用instance variable
并具有setter
相同的功能。
以下两个链接可能会帮助您了解您正在尝试做的上述事情
模拟类用于获取测试其他类功能所需的数据。在这种情况下,A 类没有使用模拟类,因为它只返回 5。但是如果它是 A 类内部的业务逻辑,则应该使用模拟类。创建一个新类并在原始类中添加相同的方法名称,并且不做任何逻辑只是从那里返回一些值。