Java Spring Test au Démarrage: Comment exclure java configuration de la classe de test contexte
J'ai un Java application web avec spring boot
Lors de l'exécution de l'épreuve j'ai besoin d'exclure certaines Java fichiers de configuration:
Test de config (il faut inclure lors de l'essai):
@TestConfiguration
@PropertySource("classpath:otp-test.properties")
public class TestOTPConfig { }
Production config (il faut exclure lors de l'essai):
@Configuration
@PropertySource("classpath:otp.properties")
public class OTPConfig { }
De la classe de Test (explicite config classe):
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestAMCApplicationConfig.class)
public class AuthUserServiceTest { .... }
Test config:
@TestConfiguration
@Import({ TestDataSourceConfig.class, TestMailConfiguration.class, TestOTPConfig.class })
@TestPropertySource("classpath:amc-test.properties")
public class TestAMCApplicationConfig extends AMCApplicationConfig { }
Aussi ont de la classe:
@SpringBootApplication
public class AMCApplication { }
Quand le test est en cours d'exécution OTPConfig
utilisé, mais j'ai besoin de TestOTPConfig
...
Comment puis-je le faire?
Notez que pour plus d'efficacité dans les deux temps de développement et de temps d'exécution, il est généralement préférable de liste uniquement de la configuration particulière des classes que vous voulez .
OriginalL'auteur Sergey | 2016-09-27
Vous devez vous connecter pour publier un commentaire.
Vous utilisez généralement le Printemps des profils pour inclure ou exclure des beans Spring, en fonction du profil actif. Dans votre situation, vous pouvez définir un profil de production, qui pourrait être activée par défaut, et un profil de test. Dans votre production config classe, vous devez spécifier le profil de production:
Le test de config de la classe de spécifier le profil test:
Puis, dans votre classe de test, vous devriez être en mesure de dire quels profils sont actifs:
Lorsque vous exécutez votre projet en production, vous devez inclure la "production" comme un profil actif par défaut, en définissant une variable d'environnement:
De votre démarrage de la production de script peut utiliser quelque chose de plus JAVA_OPTS pour définir les variables d'environnement Java, mais de toute façon vous devez définir
spring.profiles.active
.OriginalL'auteur David Miller
Vous pouvez également utiliser
@ConditionalOnProperty
comme ci-dessous:et pour le test:
De préciser dans votre
main/resources/config/application.yml
et dans votre
test/resources/config/application.yml
@ConditionalOnMissingProperty
voir iciOriginalL'auteur Ondrej Bozek
Vous pouvez utiliser
@ConditionalOnMissingClass("org.springframework.test.context.junit4.SpringJUnit4ClassRunner")
en classe de Configuration.SpringJUnit4ClassRunner
peut être remplacé par n'importe quelle classe qui seules sorties dans l'environnement de test.Oui.Je suis assez d'accord avec vous.Mais il est simple,et donnez-lui un commentaire a faire, c'est la lisibilité. Mais comme vous le dites," C'est aussi généralement pas une bonne idée d'inclure de code spécifique pour les tests dans le code de production",je vous remercie. @DaveyDaveDave
OriginalL'auteur 高慧觉