我想为类ClassToBeTested.execute()
中的方法添加单元测试。 ClassToBeTested
是从REST api收到的业务模型类。要调用该方法,我必须:
AAAclass
(必须有2个内部类模拟和存根7方法来调用我想要测试的方法)AAAclass
放入ClassToBeTested
; ClassToBeTested
取决于AAAclass
AAAclass
看起来像:
public class AAAclass {
@SerializedName("BBBclass")
private BBBclass BBBclass;
public class BBBclass {
@SerializedName("CCCclass")
private CCCclass ccc;
public DDDclass getDDD() {
if (ccc != null) {
return ccc.getDDD();
}
return null;
}
}
private class CCCclass {
@SerializedName("DDDclass")
private DDDclass ddd;
public DDDclass getDDD() {
return ddd;
}
}
public class DDDclass {
}
}
我觉得我做错了,似乎是over mocking:
不要模拟你的模型:更容易阅读,你可能会为你的生产或测试代码库添加方便的构造函数/工厂方法。
那么我真的应该添加一个特殊的构造函数来在单元测试中使用它吗?
答案 0 :(得分:0)
如前所述,很难确定对象是什么以及上下文是什么。
但是看起来你提到的课程是DTOs,但同时他们的获取者也有一些商业逻辑。
首先,我建议您将业务逻辑提取到其他地方(例如某些服务)。它不应该存在于dto对象中。
二。为什么BBBclass
,CCCclass
和DDDclass
是AAA类的内部类?你不能制作它们static
吗?或者更多事件可以将它们提取到单独的类中吗?降低系统复杂性非常重要。
我认为如果你解决了这个问题,你就不再需要嘲笑这样一个复杂的对象了。
同时请记住,如果您考虑为可测试性添加构造函数/方法,那么这已经是一个不好的迹象。这意味着您的系统变得越来越复杂,抽象也不能很好地运作。尝试重新考虑你的抽象。