public classA() {
public String getName() {
return "ClassA";
}
}
public classB() {
public String getName() {
return "ClassB";
}
}
public ClassC {
List<> list = new ArrayList<>();
@Autowired
public ClassC(final ClassA classA, final ClassB classB) {
list.add(classA);
print(classA.getName()); //prints null
list.add(classB);
}
}
——————
我试着测试c类,如下所示,
@Mock
private ClassA classA;
@Mock
private ClassB classB;
@InjectMocks
private ClassC classC;
它似乎在classc构造函数中注入类,但在从这些类中提取数据时返回null。有没有办法通过单元测试在classc构造函数中成功地检索getname()字符串?
2条答案
按热度按时间o75abkj41#
这个
getName
类A和类B中的方法是void类型。你可以把它们改回来String
看看能不能帮上忙。仅供参考的是一个类a重载方法上的getname(),请参见https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/class.html#getname()所以您也可以删除
getName
方法分为a类和b类。请告诉我这是否有用。
-卡吉:)
pvabu6sv2#
这就是mockito的设计原理。创建模拟对象时,例如:
mockito将使用bytebuddy创建另一个类,并在运行时编译该类。另一件事是该类的所有方法都将被截获。默认的拦截器总是返回
null
值或原子值的默认值。例如0
为了int
.不管原始方法总是返回相同的stirng。模拟对象将返回
null
.简言之,mockito将创建一个完全不同的类和该类的一个对象。
所以你需要模仿的方法,比如