我是mockito的新手。假设我有一个这样的类
public class MyClass {
int a;
String b;
public MyClass(int a) {
this.a = a;
this.b = draw();
System.out.println("class is created");
}
public String draw() {
System.out.println("my");
return "b";
}
public void apple() {
System.out.println("apple");
}
}
我正在使用Mockito编写一个JUnit测试,其中我使用构造函数创建了一个类的对象。当我安装类时,是否可以模拟draw()方法?
4条答案
按热度按时间bq8i3lrv1#
不清楚为什么这里需要
Mockito
。这是一个没有Mockito
的解决方案。在测试中,使用重写的
draw()
方法创建MyClass
示例:ddrv8njm2#
您可以使用spies来执行 * 部分模拟 *(参见here了解如何执行此操作)。
但和往常一样:当人们开始考虑使用模拟框架的复杂方法时,真实的的答案是:退一步改进你的产品代码。2你的构造函数应该 * 只 * 做简单的初始化工作。
在您的情况下,一个合理的方法是:不要调用内部方法来计算该字段的值-而是将该值传递给构造函数(换句话说-使用依赖注入)。
你仍然可以做这样的事情:
现在,您的单元测试可以愉快地使用接受 * 两个 * 参数的ctor--您完全不需要模拟任何东西。
czq61nw13#
用Mockito测试类的一种方法是,
hmtdttj44#
作为对给出的解决方案的补充,构造函数还可以接收要模拟为函数的方法。