Deaktivieren Sie @EnableScheduling bei Spring Tests
Wenn ich meine unit-tests, es ruft meine geplanten Aufgaben. Ich möchte verhindern, dass dieses Verhalten, das wird durch die Tatsache verursacht, dass ich @EnableScheduling
auf meinem Haupt-app-Konfiguration.
Wie kann ich diese deaktivieren, auf meine unit-tests?
Habe ich in dieser Frage/Antwortdie nahelegt, profile einrichten?
Nicht sicher, wie ich gehen würde? oder ob es ein overkill? Ich dachte an eine separate AppConfiguration für meine unit-tests, aber es fühlt sich an wie im sich wiederholenden code zweimal, wenn ich das tun?
@Configuration
@EnableJpaRepositories(AppConfiguration.DAO_PACKAGE)
@EnableTransactionManagement
@EnableScheduling
@ComponentScan({AppConfiguration.SERVICE_PACKAGE,
AppConfiguration.DAO_PACKAGE,
AppConfiguration.CLIENT_PACKAGE,
AppConfiguration.SCHEDULE_PACKAGE})
public class AppConfiguration {
static final String MAIN_PACKAGE = "com.etc.app-name";
static final String DAO_PACKAGE = "com.etc.app-name.dao";
private static final String ENTITIES_PACKAGE = "com.etc.app-name.entity";
static final String SERVICE_PACKAGE = "com.etc.app-name.service";
static final String CLIENT_PACKAGE = "com.etc.app-name.client";
static final String SCHEDULE_PACKAGE = "com.etc.app-name.scheduling";
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
//stripped code for question readability
}
//more app config code below etc
}
Unit-test-Beispiel.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={AppConfiguration.class})
@Transactional
@TransactionConfiguration(defaultRollback = true)
@WebAppConfiguration
public class ExampleDaoTest {
@Autowired
ExampleDao exampleDao;
@Test
public void testExampleDao() {
List<Example> items = exampleDao.findAll();
Assert.assertTrue(items.size()>0);
}
}
InformationsquelleAutor der Frage Robbo_UK | 2015-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht wollen, um profile verwenden, können Sie hinzufügen, fahne, aktivieren/deaktivieren Sie die Zeitplanung für die Anwendung
In Ihrem
AppConfiguration
fügen Sie dieseund in den test-fügen Sie einfach diesen Kommentar deaktivieren der Planung
InformationsquelleAutor der Antwort lolotron
Wäre eine alternative, um die Registrierung der bean-post-Prozessor, der Zeitpläne der Veranstaltungen. Diese kann getan werden, einfach, indem ich die folgende Klasse auf dem Klassenpfad Ihres tests:
Dies ist zwar Recht einfach und scheint den job zu erledigen, beachten Sie, dass habe ich nicht getestet, das sehr viel zu überprüfen oder auf mögliche Auswirkungen des entfernen einer bean definiert, die aus der Registrierung oder machen Sie sicher, dass die Bestellung von Postprozessoren kein Problem sein...
InformationsquelleAutor der Antwort yankee
In jedem Test, den Sie definieren die spring-Konfiguration verwendet werden soll, derzeit haben Sie:
Gängige Praxis ist, zu definieren, separate spring-Konfiguration für die normale Anwendung und für Ihre Prüfungen.
Dann in deinem test, mit dem man einfach refference
TestConfiguration
anstelle von Ihrem aktuellenAppConfiguration
mit@ContextConfiguration(classes={TestConfiguration.class})
Diese Weise können Sie konfigurieren Sie die Einstellungen für Ihre tests anders als bei der Produktion von code. Sie können zum Beispiel mit der in-memory-Datenbank für Ihre Prüfungen anstelle der regulären und vieles mehr.
InformationsquelleAutor der Antwort Vojtech Ruzicka
Ich nur parametrisierte my @Scheduled annotation mit konfigurierbaren delay-Zeiten:
In meiner test Anwendung.yaml:
Haupt-und Anwendung.yaml:
Ist es nicht, Sie auszuschalten, sondern die Schaffung einer so langen Verzögerung, werden die tests über einen langen Zeitraum, bevor es läuft. Nicht die eleganteste Lösung, aber definitiv einer der einfachsten, die ich gefunden habe.
InformationsquelleAutor der Antwort Laila Sharshar