【发布时间】:2013-01-18 00:18:40
【问题描述】:
我有一个非常简单的问题:我一直在为具有 Context 对象的命令对象编写一些单元测试。这个上下文里面有一些领域实体。
public class Context {
private DomainEntity domainEntity1;
private Dto dto1;
// getters and setters go here...
public boolean isDomainEntityValid() {
// a little bit of logic goes here
}
}
public class Command {
public void execute(Context context) {
// do its logic in here
}
}
DTO 和 DomainEntity 只有 setter 和 getter 以及非常简单的验证方法(例如 isFirstNameValid())。
Context 对象中确实有逻辑——毕竟,它检查上下文是否一致,上下文是否完整,等等。
在对命令对象进行单元测试时,我很清楚应该模拟出上下文 - 但是实体和 dto 呢?我应该嘲笑他们吗?如果是这样,我将不得不做很多类似下面的代码
doReturn(1L).when(domainEntity1).getId();
doReturn("phil").when(domainEntity1).getName();
换句话说,必须定义 getters 方法的许多行为。
那么,底线是:我应该在对对象进行单元测试时模拟域实体和 DTO 吗?
【问题讨论】:
-
我可能会模拟与我的测试相关的每个依赖项,以确保测试隔离。这将包括
Context、DomainEntity、Dto和任何其他相关依赖项。 -
这一切都取决于您在 Command 中的逻辑。如果它确实获得了 domainEntity 并对其进行处理,那么您必须模拟 domainEntity。
标签: java unit-testing junit mockito