这个问题有点哲学性质。假设我有一个像这样的方法:
基本上它所做的就是调用一个依赖方法,然后使用流API处理它。
严格来说,单元测试只测试一个隔离的单元。因此,我会模拟依赖项,因为我认为它们也已经被测试过了。
如果我继续下去,最终会得到一个仅由在其他地方测试过的内容组成的方法。
例如,我的JMockit测试将如下所示:
public List<String> getStuffByName(@NotNull String name) throws SomeException {
return someDependency.createQuery().byName(name).list().stream()
.map(execution -> execution.getProcessInstanceId())
.collect(Collectors.toList());
}
基本上它所做的就是调用一个依赖方法,然后使用流API处理它。
严格来说,单元测试只测试一个隔离的单元。因此,我会模拟依赖项,因为我认为它们也已经被测试过了。
如果我继续下去,最终会得到一个仅由在其他地方测试过的内容组成的方法。
例如,我的JMockit测试将如下所示:
public void test_get_processes_for_bkey_2(@Mocked ExecutionQuery query,
@Mocked List<String> processes,
@Mocked List<Execution> executions,
@Mocked Stream<Execution> e_stream,
@Mocked Stream<String> pid_stream,
@Mocked Stream<String> pdef_stream
) {
new Expectations() {
{
someDependency.createQuery(); result = query;
query.byName("somefilter"); result = query;
query.list(); result = executions;
executions.stream(); result = e_stream;
e_stream.map((Function) any); result = fin_stream;
fin_stream.collect((Collector) any); result = processes;
processes.size(); result = 2;
}
};
assertEquals(tested.getStuffByName("somefilter").size(), 2);
}
但是这个测试实际上告诉我什么呢?
在测试驱动开发中,我是否应该省略这些“包装器”方法的测试?
对于这个问题,无论是独立于Jmockit或其他框架的专业方法是什么?