@Override
    public void run() {
        try {
            final Set<String> distinctRecurringJobSignatures = getDistinctRecurringJobSignaturesThatDoNotExistAnymore();
            final Set<String> distinctScheduledJobSignatures = getDistinctScheduledJobSignaturesThatDoNotExistAnymore();

            Set<String> jobsThatCannotBeFound = asSet(distinctRecurringJobSignatures, distinctScheduledJobSignatures);

            if (!distinctRecurringJobSignatures.isEmpty() || !distinctScheduledJobSignatures.isEmpty()) {
                String jobStateThatIsNotFound = jobTypeNotFoundLabel(distinctRecurringJobSignatures, distinctScheduledJobSignatures);
                LOGGER.warn("JobRunr found {} jobs that do not exist anymore in your code. These jobs will fail with a JobNotFoundException (due to a ClassNotFoundException or a MethodNotFoundException)." +
                                "\n\tBelow you can find the method signatures of the jobs that cannot be found anymore: {}",
                        jobStateThatIsNotFound,
                        jobsThatCannotBeFound.stream().map(sign -> "\n\t" + sign + ",").collect(Collectors.joining())
                );
            }
        } catch (Exception e) {
            LOGGER.error("Unexpected exception running `CheckIfAllJobsExistTask`", shouldNotHappenException(e));
        }
    }
@Test
    void onRunItLogsAllScheduledJobsThatDoNotExist() {
        when(storageProvider.getRecurringJobs()).thenReturn(new RecurringJobsResult());
        when(storageProvider.getDistinctJobSignatures(SCHEDULED)).thenReturn(Set.of(
                getJobSignature(defaultJobDetails().build()),
                getJobSignature(classThatDoesNotExistJobDetails().build())
        ));

        checkIfAllJobsExistTask.run();

        assertThat(logger)
                .hasWarningMessageContaining("JobRunr found SCHEDULED jobs that do not exist anymore")
                .hasWarningMessageContaining("i.dont.exist.Class.notImportant(java.lang.Integer)")
                .hasNoErrorLogMessages();
    }