    @Test
    @SuppressWarnings("checkstyle:Indentation")
    public void executeTest4() throws InterruptedException {

        ExecutorService delegate = Executors.newFixedThreadPool(3);
        ExecutorEngine executorEngine = new ExecutorEngine(delegate);
        List<Integer> inputs = Lists.newArrayList(1, 2, 3);
        thrown.expect(ExecuteException.class);
        thrown.expectMessage("execute task throw exception");
        try {
            executorEngine.execute(inputs, input -> {
                if (input == 2) {
                    throw new BizRuntimeException("ba la ba la");
                }
                // 平方
                return Double.valueOf(Math.pow(input, 2)).intValue();
            }, (MergeUnit<Integer, List<Integer>>) params -> {
                ArrayList<Integer> integers = Lists.newArrayList(params);
                // 排序
                Collections.sort(integers);
                return integers;
            });
        } catch (Exception e) {
            String printLog = this.output.toString();
            boolean flag = StringUtils.isBlank(pattern.matcher(printLog).replaceAll(""));
            int retry = 0;
            while (flag) {
                // 跑多线程，这个日志获取有点延时...
                printLog = this.output.toString();
                flag = StringUtils.isBlank(pattern.matcher(printLog).replaceAll(""));
                if (retry == 20) {
                    break;
                }
                Thread.sleep(200L);
                retry++;
            }
            log.warn(
                    "\n<<<<<<<<========= printLog start =========>>>>>>>> \n{}<<<<<<<<========= printLog end =========>>>>>>>>\n",
                    printLog);
            assertThat(printLog).contains(" WARN ", " " + ClassUtils.getQualifiedName(ExecutorEngine.class) + " ",
                    "Concurrent execute result failure",
                    "" + ClassUtils.getQualifiedName(BizRuntimeException.class) + ": ba la ba la");
            throw e;
        }
    }