class InteractionRunner {

    public void executePacts(@Observes EventContext<Test> test) {
        final Pacts pacts = pactsInstance.get();
        if (pacts == null) {
            test.proceed();
            return;
        }

        TestClass testClass = test.getEvent().getTestClass();

        final List<Throwable> errors = new ArrayList<>();
        validateState(testClass, errors);
        validateTargetRequestFilters(testClass, errors);
        validateTestTarget(testClass, errors);

        Field interactionField =
            validateAndGetResourceField(testClass, RequestResponseInteraction.class, CurrentInteraction.class, errors);
        Field consumerField = validateAndGetResourceField(testClass, Consumer.class, CurrentConsumer.class, errors);

        if (errors.size() != 0) {
            String errorMessage = errors.stream()
                .map(Throwable::getMessage)
                .collect(Collectors.joining(" * "));
            throw new IllegalArgumentException(errorMessage);
        }

        executePacts(test, pacts, interactionField, consumerField);
    }

}