public void runTest(final DynamicCaseContext dynamicTestContext) {
        this.dynamicCaseProcessor.beforeDynamicCase(context, dynamicTestContext);
        try {
            synchronized (dynamicCaseProcessor) {
                if ( !this.dynamicCaseProcessor.isHeaderCreated() ) {
                    reporter.createWorksheet(dynamicTestContext.getCaseName(), dynamicTestContext.getReportHeader());
                    this.dynamicCaseProcessor.setHeaderCreated(true);
                }
            }
        } catch (Exception ex) {
            throw new IllegalStateException(ex);
        }
        DynamicCaseProcessor.debug("Processing case No." + ( ++currentCaseNumber ) + "/" + this.dynamicCaseProcessor.getTotalNumber());
        if ( DeduceResultEnum.Skip == this.dynamicCaseProcessor.generateExpectation(context, dynamicTestContext, dynamicCase) ) {
            dynamicTestContext.debug();
            dynamicTestContext.skip();
            return;
        }
        dynamicTestContext.debug();
        long start = System.currentTimeMillis();
        this.dynamicCaseProcessor.produceTargetState(context, dynamicTestContext);
        System.out.println("produce target state cost: " + ( System.currentTimeMillis() - start ) + "ms");
        start = System.currentTimeMillis();
        this.dynamicCaseProcessor.performTestAction(context, dynamicTestContext);
        System.out.println("sync cost: " + ( System.currentTimeMillis() - start ) + "ms");
        start = System.currentTimeMillis();
        this.dynamicCaseProcessor.verifyExpectations(context, dynamicTestContext);
        System.out.println("verify cost: " + ( System.currentTimeMillis() - start ) + "ms");
    }