Этот вопрос несколько философский. Учитывая, что у меня есть такой метод:
public List<String> getStuffByName(@NotNull String name) throws SomeException {
return someDependency.createQuery().byName(name).list().stream()
.map(execution -> execution.getProcessInstanceId())
.collect(Collectors.toList());
}
По сути, все, что он делает, это вызывает метод зависимостей, а затем обрабатывает его с помощью потокового API.
Unittest — в строгом понимании (?) — тестирует только один изолированный модуль. Поэтому я бы издевался над зависимостями, так как я предполагаю, что они также уже являются протестированными модулями.
Если я пройду через это, я получу метод, который состоит исключительно из вещей, протестированных в другом месте.
Например, мой тест 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 или других фреймворков?