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. P>
Comment puis-je assurer que le test DS est créé d'abord, puis la recherche JNDI de vrai code est exécutée? p>
Modifier après avoir trouvé la solution. La solution que j'ai trouvée est la suivante: p>
Il y a RepositoryConfig.java et RepositoryTestConfig.java. Avant d'importer un référentielConfig dans RepositoryStestConfig. P>
J'ai changé l'APRACH: P>
et le problème est résolu à 100%. P>
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. P>
3 Réponses :
Vous devez configurer ceci avec la classe @configuration Code> avec
@ComponentsCan code> sur votre package nécessaire p>
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.
Vous pouvez utiliser } p> et de la classe de test définit le profil actif comme" test ", un exemple < / p> explication p> La création Remarque: vous pouvez séparer les configurations de test et de bean à différentes classes. Le code partagé consiste à aider à comprendre le @profile code>
@bean code> 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 code> sera créée et pour tout autre profil une instance de DataSource avec la propriété
jdbc.url code> être créé. p>
@profile code> Utilisation p> p>
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 i>
a trouvé la réponse à la fin: Extentiellement il y a 2 approches:
Utilisez @Profile et @ActiveProfile P> LI>
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> 2 p> 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 ...
}
}
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")) code>
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.