0
votes

Test de printemps - Créez les premiers haricots des classes de test, puis le code réel

Question: Comment puis-je vous assurer que les haricots des cours de test sont créés d'abord au printemps? Situation: J'ai une source de données fournie au moment de l'exécution et il est obtenu par JNDI. Au moment de la compilation, je suis en train de gêner un pour un dB en mémoire et liez-le à un nom JNDI. Le problème est que la recherche JNDI du code réel est exécutée en premier.

Comment puis-je assurer que le test DS est créé d'abord, puis la recherche JNDI de vrai code est exécutée?

Modifier après avoir trouvé la solution. La solution que j'ai trouvée est la suivante:

Il y a RepositoryConfig.java et RepositoryTestConfig.java. Avant d'importer un référentielConfig dans RepositoryStestConfig.

J'ai changé l'APRACH:

  • J'ai fait reposer le dépôtTestConfig pour étendre RepositoryConfig
  • J'ai caché / remplacer le haricot DS dans RepositoryTestConfig
  • sur l'entitémanager J'ai ajouté la DS via AutoWire

    et le problème est résolu à 100%.

    Pour le DS a pris la recherche JNDI, j'ai créé un test séparé pour prouver la méthode, car la méthode réelle est défectueuse / surtensive maintenant par le dépôt de formulaire DSConfigtest.


3 commentaires

Pourriez-vous mettre à jour le code de la création de Datasource? est le code comme suit? retour (DataSource) Nouveau Jnditemplate (). Recherche (env.getProperty ("jdbc.url"))


C'est exactement comme ça. Comme je l'ai dit, au moment de l'exécution, cela fonctionne parfaitement, car la DS est déjà là. Lorsque des tests sont exécutés au moment de la compilation DS est créé et lié au nom JNDI. Mais la recherche JNDI est faite avant la création DS et non après.


Utilisez des profils de ressort pour vos cours de test. Le printemps a une approche très soignée pour charger les configurations selon les utilisations ou les profils. Si vous voulez, je peux vous fournir quelques exemples. Fournissez des propriétés de test dans SRC / Test / Ressources Dir.


3 Réponses :


0
votes

Vous devez configurer ceci avec la classe @configuration avec @ComponentsCan sur votre package nécessaire


1 commentaires

J'ai besoin de classes de configuration. Je ne peux pas exclure 1 avec @ComponentsCan. La seule chose dont j'ai besoin, c'est que le ressort d'exécution d'abord la classe Testconfig.java pour créer le DS et la lier à un nom JNDI, puis exécuter la classe RealCodeconfig.java pour obtenir le DS via JNDI. Et à travers cela, assurez-vous que la DS est déjà là quand elle est appelée à travers JNDI.



0
votes

Vous pouvez utiliser @profile xxx

}

et de la classe de test définit le profil actif comme" test ", un exemple < / p> xxx

explication

La création @bean est associée à un profil dans la configuration. Lorsque "Test" profil est actif, l'instance de DataSource avec entrée de propriété jdbc.test.url sera créée et pour tout autre profil une instance de DataSource avec la propriété jdbc.url être créé.

Remarque: vous pouvez séparer les configurations de test et de bean à différentes classes. Le code partagé consiste à aider à comprendre le @profile Utilisation


3 commentaires

Pourquoi je devrais avoir du code de test en code réel? Le test DS devrait résider dans une classe de test, de sorte que tout le code ne sera pas présent lorsque l'application est emballée pour être déployée.


Vous pouvez conserver le code de test comme vous préférez. J'ai ajouté une note que ceci est un exemple pour comprendre l'utilisation


Ce devrait vous donner plus de perspicacité sur ce sujet. Veuillez vous reporter à la section Test d'intégration avec des profils d'environnement



0
votes

a trouvé la réponse à la fin: Extentiellement il y a 2 approches:

  1. Utilisez @Profile et @ActiveProfile P> LI>

  2. masque le vrai réel DS réel si l'extension de la classe de configuration du code réel p> li> ol>

    1. p> xxx pré>

    2 p> xxx pré>

    dans les référentiels que vous testez vous faites:

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {RepositoryConfigTest.class})
    public class AppRepositoryTest {
    
        private App givenApp;
    
        @Autowired
        private AppRepository appRepository;
    
        @Before
        public void setup() {
          ... whatever code
        }
    
     @Test
        public void shoudReadApp() {
            //given
             .....
            //when
               .......
            //then
            assert ...
        }
       }
    


0 commentaires