即两个类:
class A{
public int getValue(){
return 5;
}
}
class B{
public int getValue(){
A a = new A();
return a.getValue();
}
}
现在我想为 B类编写测试,但我想为该测试模拟 A类。问题是:如何?
(这个片段只是我问题的一个更简单的版本,请不要小心返回5或smth)
答案 0 :(得分:3)
可能有一些棘手的方法,但简而言之,你写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可以让您注入模拟进行测试。
编辑:如果在重写B以使其单元测试友好时遇到困难,您仍然可以使用将执行字节码操作的模拟框架,如Powermock。以下是实现目标的示例:
答案 1 :(得分:1)
可以使用instance variable
进行模拟,同时使用setter
。
以下两个链接可能会帮助您完成上述尝试
JUnit mocking with Mockito, EasyMock, etc How to mock local variables in java?
答案 2 :(得分:0)
模拟类用于获取测试其他类功能所需的数据。在这种情况下,没有使用类A的mock类,因为它只返回5.但是如果它是类A中的业务逻辑,则应该使用mock类。创建一个新类并在原始类中添加相同的方法名称,而不执行任何逻辑只是从那里返回一些值。